我正在观察我的指令中的$ scope.randomObjects。如果函数不稳定,$ watch将抛出一个错误,我认为getDesiredAmountOfObjects中的curried函数是幂等的。这里有什么东西正在进行ngResource -objects,我看不到? 我怎样才能解决这个问题?此外,目前还需要修复所需的安装。
以下是我的控制器的片段:
..
var getDesiredAmountOfObjects = function (objects, randomObjects) {
return function (desiredAmount) {
var amount = desiredAmount || 1;
if (amount >= objects.length) {
return objects;
}
var randoms = randomObjects.slice(0, amount);
//logged objects are always the same in each $digest loop.
//including the $$hashKey
console.log(random);
return randoms;
};
};
//this will initialized only once in controller
ObjectRes.query(function(data) {
$scope.objects = data;
var randomObjects = [];
angular.extend(randomObjects, data);
randomObjects.sort(function () {
return 0.5 - Math.random();
});
$scope.randomObjects = getDesiredAmountOfObjects($scope.objects, randomObjects);
});
..
答案 0 :(得分:1)
我无法看到所有内容,因为我还没有看到$watch
和视图是如何设置的,但有些东西突然出现在我身上。
如果从观察者中调用randomObjects
,并且在观察范围内设置了值,则会导致无限$digest
个周期。
这是因为您不断返回新的数组引用(slice
返回一个新数组)。结果的观察者将认识到引用已更改,这将需要新的摘要循环,这将要求新的randomObjects
将触发更改的内容等。
通常,您可以通过确保函数返回对同一对象的引用来修复此问题,并且不会创建新数组。在您的情况下,您正在调用slice
,每次都会创建一个新数组。您需要确保此函数每次都返回相同的数组。
也许是这样的事情?
var getDesiredAmountOfObjects = function (objects, randomObjects) {
var result = [];
return function (desiredAmount) {
var amount = desiredAmount || 1;
if (amount >= objects.length) {
return objects;
}
// clear the result array and put randoms into it
result.length = 0;
result.push.apply(result, randomObjects.slice(0, amount));
//logged objects are always the same in each $digest loop.
//including the $$hashKey
console.log(result);
return result;
};
};