这是.as-console-wrapper {
max-height: 100% !important;
top: 0;
}
:
html
这是<div ng-repeat="user in controller.users">
<p>{{user.name}}</p>
<button ng-click="controller.deleteUser(user)" value="delete"></button>
</div>
:
controller
这是vm = this;
vm.users;
activate();
function activate() {
service.getUserList().then(function(userList){
vm.users = userList;
});
}
function deleteUser() {
service.deleteUser(user).then(function(){
activate();
});
}
:
service
因此,我删除了一个用户,然后与function deleteUser(user) {
var index = userList.indexOf(user);
if (index !== -1) userList.splice(index, 1);
return new Promise((resolve, reject) => {
resolve(userList);
});
}
对话,完成后,激活service
。这会更新activate()
,但不会更新为UI。在第二次点击vm.users
时,它可以正常工作!
这里发生了什么?
答案 0 :(得分:1)
问题:你的问题是AngularJs不知道在非角度承诺完成.then()后触发摘要周期。它只知道在从父函数返回时触发它(这是立即的,所以还没有发生变化)。
旁注 - 这就是为什么它适用于第二次点击,因为它会在从函数立即返回时触发,此时数据已从第一次点击更改。
解决方案:如果您将$q
服务用于angularjs中的延迟/承诺,那么这将解决您的问题。该API几乎与Promise
的API相同,因此您不必更改任何代码。只需将new Promise(...)
更改为$q(...)