angular: директива обновления при вводе заводских данных об изменении

У меня есть директива, которая получает данные с завода. Он отлично работает, когда загружается в первый раз. Но потом, когда заводские данные изменились, директива на эти изменения не реагирует. Как я могу это исправить?

appWD.directive('widgetName', ['WidgetData', function(WidgetData) {
    return {
        restrict: 'E',
        templateUrl: '_widget.html',
        link: function(scope, elem, attrs) {
            scope.data = WidgetData.GetWidgetData('widgetName');
            //both do not work
            //scope.$watch(scope.data);
            //scope.$watch(WidgetData.GetWidgetData('widgetName'));
        }
    };
}]);

GetWidgetData('widgetName') возвращает объект.

пример codepen: http://codepen.io/anon/pen/xwLLxM?editors=101< /а>


person georgiy.zhuravlev    schedule 12.10.2015    source источник


Ответы (2)


Попробуйте использовать

scope.$watchCollection(function(){return WidgetData.getWidgetData('widget');}, function() {
    alert('scope.$watchCollection');
 });

$watchCollection "shallow наблюдает за свойствами объекта и срабатывает при изменении любого из свойств" Документы по AngularJs

Я создал небольшое приложение, чтобы воспроизвести вашу проблему. Вот демонстрация

person Shamal Perera    schedule 12.10.2015
comment
В вашей коллекции часов возникла проблема. Я изменил код в своем ответе, а также создал демо. - person Shamal Perera; 12.10.2015
comment
Также здесь находится рабочая версия codepen.io/uslperera/pen/epEEMx?editors=101. - person Shamal Perera; 12.10.2015

setTimeout(function(){
    $scope.$apply()
},0);

поместите это после обновления данных, этот пользовательский интерфейс обновления vl может работать

person Aishwat Singh    schedule 12.10.2015