$观察带有循环引用的对象时抛出的错误

时间:2014-10-12 02:06:40

标签: angularjs

当$观察带有循环引用的对象时,例如x.y = y; y.x = x;

错误:抛出过多的递归。请参阅下面的代码。

如何自定义$ watch行为?或创建自定义' equals()'对象的功能?

<!DOCTYPE html>
<html>
<body>
    <div ng-app="" ng-controller="testController">
        {{complex .v}},{{complex.y.v}}
    </div>
</body>

<script>
    function testController($scope) {

        var x = { v: 5, y: null };
        var y = { v: 6, x: x };

        x.y = y;    // <---------------- circlular ref


        $scope.$watch('complex', function(newVal){

        }, true);

        $scope.complex = x;

    }
</script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>

</html>

1 个答案:

答案 0 :(得分:1)

您可以在手表中指定自定义功能。 E.g。

$scope.$watch(function() {
   //custom equality handler, return a value that when changed will fire the handler
}, function(newVal) {
   console.log('complex changed');
});