什么时候可以安全使用$ scope $ apply()?
如果您想使用API-Rest-Call,请promise
在您Controller
的Rest-Call内设置作用域,而不要使用return。
$http.get('uri')
.success(function(data) {
$scope.items = data
});
避免使用$apply
。从Angular GitHub Repo:
$scope.$apply
应尽可能接近异步事件绑定发生。如果这样做
(!$scope.$$phase) $scope.$apply
是因为您在调用堆栈中不够高。
对你的问题:
- 如果发现自己需要$ apply()的情况,请重新考虑您的结构。
- 出于安全原因:请勿使用
$apply
解决方法
我想标题很清楚我要问的内容。我创建了这个小提琴:http :
//jsfiddle.net/Sourabh_/HB7LU/13142/
在小提琴中,我试图复制一个async
场景。这只是一个示例,但是在AJAX调用中,如果我不使用$scope.$apply
该列表,则不会更新。我想知道$scope.$apply
每次进行AJAX调用来更新列表时是否可以安全使用?是否可以使用其他机制?
我编写的用于复制场景的代码(与小提琴相同):
的HTML
<div ng-controller="MyCtrl">
<li ng-repeat="item in items">
{{item.name}}
</li>
<button ng-click="change ">Change</button>
</div>
JS
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.items = [{name : "abc"},{name : "xyz"},{name : "cde"}];
$scope.change = function {
test(function(testItem){
$scope.items = testItem;
//$scope.$apply ;
})
}
function test(callback){
var testItem = [
{name : "mno"},{name : "pqr"},{name : "ste"}
];
setTimeout(function {callback(testItem)},2000);
}
}