【发布时间】:2015-07-01 06:21:14
【问题描述】:
我想标题很清楚我在问什么。我创建了这个小提琴:http://jsfiddle.net/Sourabh_/HB7LU/13142/
在小提琴中,我尝试复制async 场景。这只是一个示例,但在 AJAX 调用中,如果我不使用 $scope.$apply(),则列表不会更新。我想知道每次我进行 AJAX 调用以更新列表时使用 $scope.$apply() 是否安全,或者我可以使用其他一些机制吗?
我为复制场景而编写的代码(与小提琴相同):
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);
}
}
【问题讨论】:
-
您是否在尝试模仿 REST 调用?如果是这样: $http 请求返回一个承诺,您可以在控制器内部使用 .then() 来更改范围。不要在 REST 调用中设置新的范围和 $apply()。因为,你现在的所作所为毫无意义。
-
我知道它现在无济于事,但 Angular 2.0 将解决这个可怕的问题。
-
每次范围更改都贯穿摘要。 API 调用中的超时对我来说很臭。如果服务器需要更多时间怎么办?如果它被调用 2 或 3 次怎么办?
-
@gruberb。那么在什么场景下我们使用apply(),有没有只有apply()才起作用的情况呢?或者换句话说,我们什么时候应该使用 apply()?
-
我认为当你觉得需要 apply() 时,可以做得更好。作为 $rootScope,$apply() 应该在极少数情况下使用。 github.com/angular/angular.js/wiki/…
标签: javascript ajax angularjs