AngularJS-错误:$ RootsCope:使用自定义过滤器的Infdig - 如何避免返回新数组



我创建了一个简单的自定义过滤器,以随机化数组中的条目。该过滤器有效,但会引发错误:[$ 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点击时,它的工作原理很好。

因此,将函数放入表达式中是一个坏主意吗?

最新更新