如果您想使用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); } }
评论列表