Ответ 1
Кажется, что проблема связана с тем, что библиотека Charts модифицирует существующий объект в области корня и тем самым игнорирует его навсегда. Я не могу отследить, что это делает, но здесь исправление для вас: http://plnkr.co/edit/jDQFV62FSeXAQJ6o7jE8
Вот что вы имели
scope.$watch('config', function(newVal) {
if(angular.isDefined(newVal)) {
if(charts) {
charts.destroy();
}
var ctx = element[0].getContext("2d");
charts = new Chart(ctx, scope.config);
//scope.$emit('create', charts);
}
});
Выше видно, что вы передаете scope.config
непосредственно в метод диаграмм. Кажется, что это как-то модифицирует данные, и поскольку это передано по ссылке, вы на самом деле изменяете $rootScope.sales.charts
. Если вы копируете этот объект и используете его локально, как показано ниже, у вас нет этой проблемы.
Вот как я его исправил.
scope.$watch('config', function(newVal) {
var config = angular.copy(scope.config);
if(angular.isDefined(newVal)) {
if(charts) {
charts.destroy();
}
var ctx = element[0].getContext("2d");
charts = new Chart(ctx, config);
//scope.$emit('create', charts);
}
});
Вы можете видеть, что вместо того, чтобы передавать этот объект непосредственно, мы используем angular для создания копии (angular.copy()
) и того, что объект мы передаем.