Проблема с угловым $ scope.Watch

0

У меня есть scope.watch, как показано ниже, в моей функции ссылки директивы

scope.$watch(function () {
return scope.chartConfig;
}, function (value) {
console.log(value);
}, true);

Его забивание ниже ошибки

angular.js:12221 TypeError: Illegal invocation
    at isArrayLike (angular.js:278)
    at forEach (angular.js:332)
    at copy (angular.js:913)
    at copy (angular.js:879)
    at putValue (angular.js:944)
    at copy (angular.js:926)
    at copy (angular.js:879)
    at putValue (angular.js:944)
    at copy (angular.js:926)
    at copy (angular.js:879)(anonymous function) @ angular.js:12221(anonymous function) @ angular.js:9055Scope.$digest @ angular.js:15574Scope.$apply @ angular.js:15824(anonymous function) @ angular.js:17580completeOutstandingRequest @ angular.js:5370(anonymous function) @ angular.js:5642
angular.js:12221 Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
http://errors.angularjs.org/1.4.0/$rootScope/infdig?p0=10&p1=%5B%5D
    at angular.js:68
    at Scope.$digest (angular.js:15594)
    at Scope.$apply (angular.js:15824)
    at angular.js:17580
    at completeOutstandingRequest (angular.js:5370)
    at angular.js:5642(anonymous function) @ angular.js:12221(anonymous function) @ angular.js:9055Scope.$apply @ angular.js:15826(anonymous function) @ angular.js:17580completeOutstandingRequest @ angular.js:5370(anonymous function) @ angular.js:5642
angular.js:68 Uncaught Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
http://errors.angularjs.org/1.4.0/$rootScope/infdig?p0=10&p1=%5B%5D

Пожалуйста, найдите ссылку plunker для того же

  • 0
    Angular обнаруживает эту ситуацию и не позволяет бесконечному циклу заставить браузер перестать отвечать на запросы. Например, ситуация может возникнуть, настроив отслеживание на пути и впоследствии обновив тот же путь при изменении значения. Зачем нужна область видимости. $ Смотреть в этой директиве?
  • 0
    Да я понял, почему проблема возникает нормально. Но я хочу знать, почему это происходит в приведенном выше примере. Мне нужны часы, чтобы перерисовать график, если данные изменятся.
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Основная проблема здесь заключается в ошибке TypeError: Illegal invocation.

Объект, который вы глубоко просматриваете, содержит элементы DOM, которые angular.copy не может обрабатывать.

Например chartConfig.data.datasets[0].controller.chart.chart.canvas который является ссылкой на фактический холст.

Кроме того, глубокое наблюдение за таким массивным объектом не подходит для производительности.

Добавьте наблюдателя только на данные, которые вам действительно нужны, чтобы смотреть.

  • 0
    Спасибо, наблюдая, что scope.chartConfig.data.datasets [0] .data решил проблему
  • 0
    Пожалуйста :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню