为什么我的 Angular 的 ng-show 调用仅在使用 Firebase 进行第二次点击时更新?

2024-02-08

我正在使用 AngularJS 和 Firebase 开发登录页面。到目前为止,我的大部分代码都运行良好,直到我尝试添加通知。当 ng-show 说应该显示时,似乎不会显示。需要点击两次才能工作,但绝不应该出现这种情况。 截至目前,我有以下按钮。

    <button ng-click="cna()" type="button" class="btn btn-success ban block" style="width:50%">Create New Account</button>

cna() 函数是创建新帐户函数。这看起来像:

    create($scope.email, $scope.password);

create() 方法如下所示:

    function create(email, password) {
        firebase.auth().createUserWithEmailAndPassword(email,password).catch(function(error){
            var errorCode = error.code;
            var errorMessage = error.message;
            console.log(errorCode+":"+errorMessage);
            $scope.failure = true;
            $scope.success = false;
        });
        firebase.auth().onAuthStateChanged(function(user){
            if(user){
                $scope.success = true;
                $scope.failure = false;                
            }else{}
        });
     }

最后,当 $scope.success 或 $scope.failure 设置为 true 时,我应该显示两个通知。但是,这仅适用于第二次单击,而第二次单击应该会失败。所以,我的问题是我的帐户正在创建,但我的 GUI 直到第二次单击才收到通知。根本不应该再点击一次才能正常工作。

最后,我的通知代码如下所示:

    <div class="alert alert-success" ng-show="success"><strong>Success!</strong> You made an account!</div>

    <div class="alert alert-danger" ng-show="failure"><strong>Sorry!</strong> This user already exists...</div>

我浏览了所有的网络,到目前为止我发现的是一个叫做 AngularFire 的东西,它可能是一个不错的选择,但我不确定。如果有人可以帮助我解决我的问题,我将非常感激!


如果您在回调函数中更新范围,AngularJS 不会意识到该更新。这意味着它不会更新视图。因此,虽然数据更新了,但视图却没有更新。这也是为什么当您再次单击(或以其他方式强制刷新视图)时,数据会显示出来。

解决方案是明确告诉 AngularJS 它需要通过调用刷新视图$timeout() or $apply().

function create(email, password) {
    firebase.auth().createUserWithEmailAndPassword(email,password).catch(function(error){ $timeout(function() {
        var errorCode = error.code;
        var errorMessage = error.message;
        console.log(errorCode+":"+errorMessage);
        $scope.failure = true;
        $scope.success = false;
    })});
    firebase.auth().onAuthStateChanged(function(user){
        if(user){ 
          $timeout(function() {
            $scope.success = true;
            $scope.failure = false;                
          });
        }else{}
    });
 }

如果您使用标准绑定库:AngularFire,许多此类情况都会自动处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 Angular 的 ng-show 调用仅在使用 Firebase 进行第二次点击时更新? 的相关文章

  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 无法使用 CLI Firebase auth:import 命令导入用户帐户

    我需要在 Firebase 中导入用户列表以及电子邮件和密码 我正在尝试使用 CLI auth import 命令在 Firebase 中导入用户 https firebase google com docs cli auth import
  • 使用 Jasmine 测试服务功能 POST 响应

    我不完全确定如何执行此操作 但我有一个端点 URL 它是用于登录身份验证的 POST 请求 添加请求负载时 您将获得成功的登录凭据或错误 但是 我似乎在获取响应时遇到问题 这是我的spec file describe Service Aut
  • 如何使用 ng-repeat 更改 AngularJS 中特定 的背景颜色

    如何为每一行设置不同的背景颜色 举个例子 第 1 行 蓝色 第2行 红色 第三行 绿色 main js scope names fName John lName David fName Richard lName Daniel fName
  • Firebase Android:电子邮件链接身份验证。意图过滤器不起作用

    我正在为 Android 实现 firebase 电子邮件链接身份验证机制 我已经使用 firebase 指南实现了它 但现在打开电子邮件中的链接后 应用程序始终会进入启动器活动 我无法调试该问题 我还在我的应用程序中实现了动态链接 效果很
  • 如何在点击时添加和删除活动类 - 角度方式

    我正在这样做 div class tiles div 控制器 scope select function item scope selected item scope isActive function item return scope
  • 切换按钮不适用于 AngularJS 和 Angular ui Bootstrap

    切换按钮出现 但不起作用 我现在在网上也有相同的代码 但它不起作用 但在 Plunker 中它可以工作 Plunker 切换按钮正在工作 http plnkr co edit R5F5D1FGyHiv9X1cfOoa p preview 在
  • 输入类型 = AngularJS 中的数字验证

    我正在尝试验证 lt input type number gt 通过使用输入 数字 AngularJS 模块 ng 的指令 当使用数字类型的输入时 最大 或最小 属性设置为数字 例如
  • angularjs ng-repeat 在两个级别上但只有一个输出

    我有一个看起来像这样的大物体 scope marketplaces first example second example 我想做的是循环遍历大对象 如下所示 section ul li li ul section 在循环内部 再次循环每
  • 缓存 firestore 中 get 的第一个实现

    我希望 firestore 每次都先从缓存中获取数据 根据 Firestore 文档 传递 缓存 或 服务器 选项必须启用相同的功能 下面的例子 db collection cities where capital true get cac
  • 具有材料设计的Angularjs无法实例化模块ngMaterial

    我已经使用 Bower 安装了 AngularJS 和 MaterialJS 凉亭安装角材料 并将 ngMaterial 注入我的应用程序 但出现此错误 Uncaught Error injector modulerr Failed to
  • AngularJS 输入字段未从控制器内的 setTimeout 更新

    我正在使用 AngularJS 支持的页面 并且我需要在只读输入文本字段内显示正在运行的时钟 与data ng model 为了模拟运行的时钟 我使用了 JavaScript 调度程序setTimeout每 1000 毫秒调用一个函数 该函
  • 如何在没有分页装饰的情况下渲染 ngTable?

    在我的小型 AngularJS 应用程序中 我使用 ngTable 库渲染多个表格 只有一个可以使用分页 其他的内容总是少于一页 每个渲染的 ngTable 似乎都在表格下方添加了 10 25 50 100 选择器 对于我的大多数桌子来说
  • Angular 2 中的变更检测

    我正在将角度 1 和角度 2 集成在一起 因此我有角度 1 控制器和服务以及角度 2 组件 这些对于数据检索和存储来说工作得很好 反之亦然 下面是我的 html 页面 h3 Angular 1 service h3 div div
  • React 文件预览 (FIREBASE)

    我目前将文件存储在 Firebase 存储中 我希望能够实时生成每个文件的文件预览 映射 例如 PDF 文件会将第一页显示为图像 docx 将是文档的第一页 pptx 将是第一张幻灯片 未知文档将是默认文档符号 有人知道有什么好的服务可以轻
  • AngularJS:初始化指令内的隔离范围

    我创建了一个指令 它接受一些属性并使用这些属性初始化隔离范围 如果未指定属性 则应使用计算值初始化隔离范围 我添加了一个链接函数 用于检查范围并初始化默认值 如果未使用属性设置值 范围已初始化 但如果我设置默认值 那么它稍后会被框架覆盖 一
  • 使用 Angular 下载具有动态 src 的脚本

    Angular 提供了通过动态名称动态加载模板的方法ng include 该部分中的内联 JS 和 CSS 可以正常加载 但没有一个好的方法来下载带有动态 url 的脚本 我们需要下载脚本 相对于调用它们的 html 部分的路径 即我们有一
  • Angular.js,如何将值从一个组件传递到任何其他组件

    我从 Angular js 开始 所以如果我解释得不够 我会将其添加到问题中 请告诉我 I have A component js A template html B component js B template html A compo
  • Firebase ref.removeAllObservers() 是否也会递归删除子观察者?

    我看到了一些与此相关的问题 但没有一个真正证实了我的疑问 If I removeAllObservers 在父节点上 这是否也会递归地删除可能已附加在所有子节点和子节点的子节点等处的所有其他观察者 递归地 API 文档为removeAllO
  • Firebase Firestore:获取文档的生成 ID (Python)

    我可以创建一个新文档 带有自动生成的 ID 并存储对其的引用 如下所示 my data key value doc ref db collection u campaigns add my data 我可以像这样访问数据本身 print d

随机推荐

  • 接口上的属性有什么用?

    使用 Resharper 我提取了现有类的接口 这个类在一些成员上设置了一些属性 Resharper 也将这些属性放在接口成员上 我可以从界面中删除这些属性吗 实现接口时不会继承接口上的属性 对吧 它们不被实现类使用 但仍然可能很关键 例如
  • 反应路由器索引路由始终处于活动状态

    我正在尝试使用 React 来设计我的导航activeClassName属性 到目前为止 它按预期工作 但有一个问题 我的第一个导航链接指向根路线 因此 即使在另一个 URL 上 它也会将该 URL 例如 skills 和 root 注册为
  • JQUERY UI - 根据验证选择选项卡

    我将 Jquery UI 选项卡式表单与需要验证的每个选项卡上的输入放在一起 理想情况下 我想验证当前可见的选项卡 然后选择下一个不验证的选项卡 最好的方法是什么 我的代码如下 div ul li a href tab1 One a li
  • 发送带有源端口但不绑定的 UDP 数据包

    我想在 Python 中发送 UDP 数据包并指定源端口但不绑定 与 hping3 等效 hping3 s sourceport p remoteport udp file message bin d 1024 c 1 remoteaddr
  • Googletest Eclipse C++:如何同时具有测试和生产可执行文件?

    我有一个基本问题谷歌测试 https code google com p googletest 在 Eclipse 中 我正在使用测试运行者 https github com xgsa cdt tests runner wiki Tutor
  • 在控制台中访问新的 ember 路由器

    是否有等效的函数可以使用 ember 中的新路由器在控制台中获取 currentPath 之前 我能够做到这一点 App router get currentPath 但是 似乎使用新路由器 您无法以相同的方式访问路由器 事实上 App r
  • 使用 OpenSSL 将现有 TCP 套接字转换为 TLS

    我需要一些有关 OpenSSL TLS 套接字的信息 首先 我想通过 TCP 上的 TLS 与服务器建立连接 通常首先创建一个 TCP 套接字 然后使用 TCP 套接字连接到服务器 然后将 TCP 套接字转换为 TLS 在通过 TCP 套接
  • 根据父高度调整 Imageview 的大小

    我有一个如下定义的布局
  • 如何为 iPhone 创建自定义弹出窗口?

    I want to create a custom popup window for iPhone which should look like this 对于 iPhone 和 iPod 设备来说 最正确的实现方法是什么 执行此操作的最佳
  • 在图库中找不到图像

    我需要测试一个需要从 Android JellyBean 模拟器图库中选取一些图像的功能 所以我使用模拟器自己的浏览器 速度太慢了 从互联网上下载了一些图像 图像出现在下载的文件中 但不出现在模拟器图库中 在 GingerBread 模拟器
  • C# 和 PHP 上的三重 DES 加密会产生不同的结果

    我正在编写一个简单的登录加密系统 但有一个小问题 C 加密函数 public static string EncryptString string Message string Passphrase byte Results System
  • 如何在tcl中执行子字符串提取和替换

    我正在尝试从 Tcl 中的字符串中提取子字符串 我编写了代码并且能够做到这一点 但我想知道是否还有其他有效的方法来做到这一点 所以确切的问题是我有一个字符串 name ext 10a string 10a string string str
  • Java中的透明圆形对话框

    我正在用 Java 构建一个 Poker Odds Calc 应用程序 我想通过单击卡的占位符来选择一张新卡 该占位符基本上是一个扩展的 JPanel 我 绘制 卡的表面并有一个 mouseListener 我想做的是 当我单击该卡时 我希
  • android:无法将只读数据库从版本0升级到1

    我知道有很多主题具有相同的标题 但我已经尝试了所有主题 我无法解决我的问题 我得到的错误正是这样的 android database sqlite SQLiteException 无法将只读数据库从版本0升级到1 data data com
  • 如何将 plist 保存到 NSUserDefaults

    我正在尝试保存一个 plist我已经创建到我的NSUserDefaults这样我就可以保存要放入其中的数据 因此如果应用程序停止 从多任务栏删除 我不会丢失这些值 我被指出了这个教程here http www cocoadev com in
  • SQL Server Management Studio 2012 中的 SQL 查询分析器在哪里

    我有一些正在运行的 SQL 返回结果 解析 显示等应用程序需要很长时间 我安装了 SQL Server Management Studio 2012 但我找不到 SQL 查询分析器 任何投入都将是可观的 看看这个链接http consult
  • arecord 创建的多个文件

    我使用 buildroot 进行了自定义分发 并为 ARMv7 处理器提供了硬流 一切正常 除了 arecord D hw 0 0 fdat d 5 test wav 这会生成多个文件 其中有数千人 rw r r 1 root root 9
  • 如何在 HTML 中对齐两列

    我正在尝试以 HTML 格式设置个人信息列表 就像是 myself p font size 130 margin left auto margin right auto text align center div class myself
  • 通过网络上的链接访问 php 文件

    我创建了一个非常简单的 html 页面 下面是html文件的代码
  • 为什么我的 Angular 的 ng-show 调用仅在使用 Firebase 进行第二次点击时更新?

    我正在使用 AngularJS 和 Firebase 开发登录页面 到目前为止 我的大部分代码都运行良好 直到我尝试添加通知 当 ng show 说应该显示时 似乎不会显示 需要点击两次才能工作 但绝不应该出现这种情况 截至目前 我有以下按