Angularjs 为什么这种排序会导致无限摘要错误?
架构如下:我有一个控制器和一个服务。控制器可以调用服务并对其数据进行排序。我有一个服务方法Angularjs 为什么这种排序会导致无限摘要错误?,angularjs,angularjs-digest,Angularjs,Angularjs Digest,架构如下:我有一个控制器和一个服务。控制器可以调用服务并对其数据进行排序。我有一个服务方法setSort,它只是在服务中设置一个变量。控制器监视服务中的数据。如果排序是活动的,我会得到一个无限摘要错误。演示: /** *带排序的角度快速变化数据 */ console.clear(); 角度.module('app',[]) .controller('main',函数($scope,dataSvc,$timeout){ $scope.items=dataSvc.generateData().ge
setSort
,它只是在服务中设置一个变量。控制器监视服务中的数据。如果排序是活动的,我会得到一个无限摘要错误。演示:
/**
*带排序的角度快速变化数据
*/
console.clear();
角度.module('app',[])
.controller('main',函数($scope,dataSvc,$timeout){
$scope.items=dataSvc.generateData().getData();
$scope.$watch(dataSvc.getData,函数(curr,orig){
如果(当前!==原始){
$scope.items=curr;
}
});
var-toggle=true;
$scope.onClick=function(){
dataSvc.setSort(切换“asc”:“desc”);
切换=!切换;
};
})
.factory('dataSvc',function(){
var数据=[];
var排序;
风险价值限额=50;
//使用美国州名只是为了好玩
var州=[“阿拉巴马州”、“阿拉斯加”、“美属萨摩亚州”、“亚利桑那州”、“阿肯色州”、“加利福尼亚州”、“科罗拉多州”、“康涅狄格州”、“特拉华州”、“哥伦比亚特区”、“密克罗尼西亚联邦”、“佛罗里达州”、“乔治亚州”、“关岛”、“夏威夷州”、“爱达荷州”、“伊利诺伊州”、“印第安纳州”、“爱荷华州”、“堪萨斯州”、“肯塔基州”、“路易斯安那州”、“缅因州”、“马绍尔群岛”、“马里兰州”,“马萨诸塞州”、“密歇根州”、“明尼苏达州”、“密西西比州”、“密苏里州”、“蒙大拿州”、“内布拉斯加州”、“内华达州”、“新罕布什尔州”、“新泽西州”、“新墨西哥州”、“纽约州”、“北卡罗来纳州”、“北达科他州”、“北马里亚纳群岛”、“俄亥俄州”、“俄克拉荷马州”、“俄勒冈州”、“帕劳州”、“宾夕法尼亚州”、“波多黎各州”、“罗德岛州”、“南卡罗来纳州”、“南达科他州”田纳西州、德克萨斯州、犹他州、佛蒙特州、维尔京群岛、弗吉尼亚州、华盛顿州、西弗吉尼亚州、威斯康星州、怀俄明州];
函数生成数据(限制){
var n=0;
var数据=[];
while(n
JS-Bin
切换排序
-
{{item.id}}
{{item.score}
您正在查看的dataSvc.getData()
函数每次都返回不同的对象。Angular将继续运行摘要循环,直到它正在查看的所有内容不变。您可以通过取消$watch
来解决此问题
JS
HTML
使用watchCollection
也可以。我认为它每次都返回相同的数组,因为sort
在适当的位置进行排序并返回相同的数组,例如var arr=[3,2,1];arr.sort()==arr.sort();/=>true
。而..sortByOrder
则不是这样。
$scope.getItems = function() {
return dataSvc.getData();
};
<li ng-repeat="item in getItems() track by item.id">