从控制器更新值时出现 ng-if 问题

ng-if problems when updated value from controller

本文关键字:ng-if 问题 控制器 更新      更新时间:2023-09-26


我正在使用AngularJS和Meteor,并且在身份验证方面遇到麻烦,我正在使用帐户密码包以使用帐户包方法,但实现了我自己的UI。
至于现在我的ng.html(查看)文件上有这个:

<div ng-if="$auth.currentUser">I am visible only for logged in users!
    <br>
    {{ $auth.currentUser.emails }}

    <form>
        <input type = "submit" value = "Logout" ng-click = "logout();">
    </form>
</div>
<div ng-if="!$auth.currentUser">
        <input type="email" name="loginEmail" ng-model = "loginEmail">
        <input type="password" name="loginPassword" ng-model = "loginPassword">
        <input type = "submit" value = "Login" ng-click = "login(loginEmail,loginPassword);" >
</div>

因此,如果有用户记录,则在 $auth.currentUser 的值中不为 null,第一个div 应该是可见的。主要问题是我调用 $parent.login(...) 使用控制器进行身份验证,我的控制器上有这个:

$scope.login = function(loginEmail, loginPassword) {
            //event.preventDefault();
            Meteor.loginWithPassword(loginEmail, loginPassword);
            //location.reload();
            //$route.reload();
}

登录函数结束后,$auth.currentUser 变量不为空,没关系,现在我们应该看到另一个div,但是,ng-if 不会再次检查 $auth.currentUser 的值,直到发生某些事情,比如我按下按钮两次或使用我的一些网页函数,例如在经过时更改某些div 的某些样式或属性。

所以我的问题是,有没有办法让 ng-if 在某些方法结束后再次检查值(因为这在注册和注销方法中也会发生)或变量已更新?

感谢您的时间和答案:)

你可以像这样使用回调,

        Meteor. loginWithPassword(loginEmail, loginPassword, function (err, result) {
            if (err) {
                // TODO: Log error
            } else {
                Meteor.logoutOtherClients(function () {
                    $state.go('your_state_name');   //something like $state.go('home'); 
                });
            }               
            $scope.$apply(function () {
                //you can set any other $scope variables using $scope.$apply
                $scope.isAuthenticating = false;    
            });
        });

loginWithPassword 方法可以采用第三个参数;一个回调函数。LoginWithPassword 是一个异步方法,所以当服务器给我们返回答案(并且回调被触发)时,我们需要通知 Angularjs 发生了一些事情。在回调函数中调用 $scope.$apply()。