20

これは、何らかの循環参照があることを意味すると思いますが、私の人生では、それを修正する方法を推測できません。

誰にもアイデアはありますか?

http://plnkr.co/edit/aNcBcU?p=preview

(たとえば) Chrome のデバッグ コンソールを確認すると、エラーが表示されます。違反ラインは

 scope.map = map;

scope.map はコントローラーで「$watched」されています

$scope.$watch("options.map", function (map) { ... }, true);
4

3 に答える 3

18

これは、参照ではなく同等のオブジェクトを比較しているためです。$watchステートメントを次のように変更します。

$scope.$watch("options.map", function (map) {
    if (map === undefined) {
        alert("map has no value");
    } else {
        alert("map is defined");
    }
});
于 2013-04-12T05:01:18.063 に答える
6

$watch 関数の 3 番目のパラメーターは、監視対象のオブジェクトを比較する方法を示します。参照比較のみの場合はfalse 。オブジェクトに循環参照が含まれている場合は、再帰的等値比較に真であり、最大スタック サイズを超えています。例えば:

var a = {ref:b};
var b = {ref:a};
$scope.$watch('b', function(){
  //code here will never called, because stack overflow when comparing the object b. 
}, true)
于 2015-06-11T02:45:05.833 に答える