在我的角度应用中,我有$scope
变量user
和name
。
如果我将此变量设置为" test"点击:
<a href="#" ng-click="setUser()">Set User</a>
具有功能
$scope.user = {
name: 'blank'
}
$scope.setUser = function(name) {
$scope.user.name = name
}
这很好用。但是,如果我在promise.then()
*内设置它,它似乎正确设置变量,但在我在$ scope.user上执行了另一个操作之前,Angular不会在视图中更新它。
<a href="#" ng-click="startLogin()">Set User</a>
现在调用一个新函数startLogin()
$scope.user = {
name: 'blank';
};
$scope.setUser = function(name) {
$scope.user.name = name;
};
$scope.startLogin = function() {
var promise = Kinvey.ping();
promise.then(function(response) {
console.log('success');
$scope.setUser('test');
});
};
这样做之后。视图中的{{user.name}}
字段仍然是&#34;空白&#34;。
我还测试了以下内容:
$scope
在该功能中运行良好。$scope.user
,表明变量已更改。$scope.$apply()
解决这个问题,但这似乎是解决此问题的错误方法。*我使用的Kinvey使用与CommonJS's promise.then()类似或相同的语法
答案 0 :(得分:5)
双向绑定在角度digest cycle期间更新。这些循环由绑定到指令的DOM事件或参与Angular生态系统的其他实体触发。
因此Angular提供的“魔力”只是自动触发该摘要周期。您可以使用$scope.apply
:
promise.then(function(response) {
$scope.$apply(function() {
console.log('success');
$scope.setUser('test');
});
});
这是处理第三方库时的推荐方法。