【发布时间】:2019-06-09 09:01:55
【问题描述】:
我是 Promise 概念的新手,在尝试提交登录表单时遇到问题。
当 promise 解决后,我想通过更改范围变量的值来更新 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);
});
});
};
因此,一旦 promise 得到解决,控制器中的 $ctrl.loginError 就会更改其值,但不会在 UI 上更新。
我尝试过使用$apply 并且它有效,但我不明白为什么我必须使用$apply!我以为是默认启动摘要循环的!
我做错了吗?
【问题讨论】:
-
在服务中不需要像这样解决承诺。你可以直接返回你的http调用
-
$http 服务返回一个承诺,在处理后触发一个摘要。不需要将其包装在本机承诺上。您应该接受@Denis Reshetniak 的回答。
标签: angularjs promise angular-promise angularjs-digest