什么时候可以安全使用$ scope$ apply()?

【字号: 日期:2024-04-09浏览:58作者:雯心
(adsbygoogle = window.adsbygoogle || []).push({}); 如何解决什么时候可以安全使用$ scope$ apply()??

如果您想使用API​​-Rest-Call,请promise在您Controller的Rest-Call内设置作用域,而不要使用return。

$http.get(’uri’) .success(function(data) { $scope.items = data});

避免使用$apply()。从Angular GitHubRepo:

$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); }}

相关文章: