ng-if来自控制器的更新值时出现问题

时间:2016-02-25 13:56:39

标签: javascript html angularjs meteor


我正在使用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不再检查值of $ auth.currentUser,直到发生某些事情,比如我按下按钮两次或使用我的一些网页功能,例如在过去时更改某些div的某些样式或属性。

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

感谢您的时间和答案:)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

你可以使用这样的回调,

        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;    
            });
        });