我创建了一个简单的自定义过滤器,以随机化数组中的条目。该过滤器有效,但会引发错误:[$ Rootscope:infdig]。
在AngularJS文档中,它说由于实例化新数组而导致此错误。
问题:如何通过不返回新数组来应用此过滤器? (避免摘要环错误)
感谢您的帮助!vin
过滤器:
(function () {
"use strict";
angular
.module("app")
.filter("shuffleArray",
shuffleArray);
function shuffleArray() {
return function (array) {
return array.sort(function () {
return 0.5 - Math.random()
});
}
};
}());
控制器:
(function () {
"use strict";
angular
.module("app")
.controller("MainCtrl", MainCtrl);
function MainCtrl() {
var vm = this;
vm.testArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
};
}());
查看:
<pre> {{ vm.testArray | shuffleArray }} </pre>
感谢您的回复JB Nizet。
现在我提出了以下解决方案:
我将shufflearray方法放在我称为" helperService"的类中。
helperService:
...
function helperService() {
function shuffleArray(array) {
return array.sort(function () {
return 0.5 - Math.random()
})
}
return {
shuffleArray: shuffleArray
};
...
控制器:
...
vm.testArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
vm.toggleShuffle = function () {
return helperService.shuffleArray(vm.testArray);
}
...
查看:
<button ng-click=" shuffle = vm.toggleShuffle()">toggleShuffle</button>
<pre>shuffle click result: {{ shuffle }} </pre>
这很好!
因此,问题似乎是在视图中,我将Shuffle()函数称为表达式。放入ng点击时,它的工作原理很好。
因此,将函数放入表达式中是一个坏主意吗?