我认为2种方式绑定是有角度的东西:
我可以从表单发布到控制器,如果我刷新页面,我会在页面上看到我的输入:
$scope.loadInput = function () {
$scope.me.getList('api') //Restangular - this part works
.then(function(userinput) {
$scope.Input = $scope.Input.concat(userinput);
// scope.input is being referenced by ng-repeater in the page
// so after here a refresh should be triggered.
},function(response){
/*@alon TODO: better error handling than console.log..*/
console.log('Error with response:', response.status);
});
};
在html页面中,ng-repeater
遍历for i in input
数组。但除非我刷新页面,否则不会显示表单中的新输入。
我很乐意为此提供帮助 - 谢谢!
答案 0 :(得分:5)
尝试$scope.$apply
:
$scope.loadInput = function () {
$scope.me.getList('api') //Restangular - this part works
.then(function(userinput) {
$scope.$apply(function(){ //let angular know the changes
$scope.Input = $scope.Input.concat(userinput);
});
},function(response){
/*@alon TODO: better error handling than console.log..*/
console.log('Error with response:', response.status);
});
};
原因:你的ajax是异步的,它将在下一回合执行,但此时,你已经离开了角度循环。 Angular不知道这些变化,我们必须在这里使用$scope.$apply
来进入角度循环。这种情况与使用$http
等角度服务略有不同,当您使用$http
服务并在.success
内处理您的回复时,angular会知道这些更改。
DEMO不起作用。您会注意到第一次单击不会刷新视图。
setTimeout(function(){
$scope.checkboxes = $scope.checkboxes.concat([{"text": "text10", checked:true}]);
},1);
使用$scope.$apply
工作的setTimeout(function(){
$scope.$apply(function(){
$scope.checkboxes = $scope.checkboxes.concat([{"text": "text10", checked:true}]);
});
},1);