我是新的承诺概念的新手,我在尝试提交登录表单时面临问题。
解决承诺时,我想通过更改示波器变量的值来更新UI。
这是称为
的控制器方法 $ctrl.loginForm = function(isValid) {
// check to make sure the form is completely valid
if (isValid) {
LoginService.login($ctrl.user).then(function (value) {
$ctrl.loginError = false;
var cookie = value.token;
}, function (reason) {
$ctrl.loginError = true;
});
}
};
这是我的服务方法
service.login = function(credentials) {
return new Promise((resolve, reject) => {
$http.post(AppConst.Settings.apiUrl + 'api-token-auth/',credentials).success((data) => {
resolve(data);
}).error((err, status) => {
reject(err, status);
});
});
};
因此,一旦在控制器中解决了承诺后的$ctrl.loginError
,则更改其值,但不会更新UI。
我已经尝试使用$apply
,并且可以使用,但是我不明白为什么必须使用$apply
!我以为摘要周期默认开始!
我做错了什么?
$http
方法返回您的诺言,即$ q服务。因此,问题是您使用本机承诺包装器,该包装器不告诉Angular的范围运行$应用方法。将您的服务更改为以下
service.login = function(credentials) {
return $http.post(AppConst.Settings.apiUrl + 'api-token-auth/',credentials);
};