Javascript ng当从控制器更新值时出现问题
Javascript ng当从控制器更新值时出现问题,javascript,html,angularjs,meteor,Javascript,Html,Angularjs,Meteor,我在Meteor中使用AngularJS,我在身份验证方面遇到了麻烦,我使用accounts password包来使用accounts包方法,但实现了我自己的UI 至于现在,我在我的ng.html(视图)文件中有这样的内容: <div ng-if="$auth.currentUser">I am visible only for logged in users! <br> {{ $auth.currentUser.emails }} <
我在Meteor中使用AngularJS,我在身份验证方面遇到了麻烦,我使用accounts password包来使用accounts包方法,但实现了我自己的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>
在login函数结束后,$auth.currentUser变量不为null,这没关系,现在我们应该看到另一个div,但是,ng if在发生某些事情之前不会再次检查$auth.currentUser的值,比如我按下两次按钮,或者使用一些网页功能,例如在浏览时更改一些div的样式或属性
所以我的问题是,有没有一种方法可以让ng在某个方法结束后再次检查该值(因为在Register和Logout方法中也会发生这种情况)或者更新了一个变量
感谢您的时间和回答:)使用密码登录的
方法可以使用第三个参数;回调函数。LoginWithPassword是一种异步方法,因此当服务器返回答案(并触发回调)时,我们需要通知Angularjs发生了什么。在回调函数中调用$scope.$apply()。您可以像这样使用回调
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;
});
});
我没有使用Meteor,但是对于angular,你可以将ng if绑定到$scope上的属性,当属性发生变化时,它应该可以工作。嗨,Kishor!我刚刚实现了,似乎工作得很好。谢谢lot@JaviAlca尼茨很高兴知道它起作用了。如果它解决了您的问题,请接受它作为答案。:)
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;
});
});