$ watch не работает, когда модель обновляется в области. $ apply in directive

17

У меня есть директива, в которой я добавил часы на модели существующего файла области действия. При изменении модели по охвату. $ Apply, нет вызова слушателю в часах.

Вот код директивы, любезно сообщите мне, если я что-то упустил,

   directive('fileuploadPlugin', function() {
    var linkFn;
    linkFn = function(scope, element, attrs) {
        angular.element(element).ready(function() {
            jQuery('#fileupload').fileupload({
                done: function (e, data) {
                    scope.$apply(function(scope) {
                        for(var i=0; i < data.result.filesuploaded.length; i++){
                                      scope.existingfiles.push(data.result.filesuploaded[i]);
                    };                              
                    });
                }
        });
        scope.$watch('existingfiles', function(newValue, oldValue) {
                element.imagesLoaded(function() {
                scope.$apply( function() {
                    element.masonry({
                        itemSelector : '.box'
                    });
                });
            });
        });
    };
    return {
        templateUrl : 'templates/fileupload_plugin.htm',
        restrict    : 'A',
        scope       : {
            existingfiles   : '=ngModel',
        },
        link        : linkFn
    };  
     })

Вот мой призыв к директиве,

<div fileupload-plugin ng-model="existingfiles"></div>

Пожалуйста, дайте мне знать, как убедиться в правильности просмотра модели.

    
задан Abdul Azeez 06.10.2012 в 20:39
источник

1 ответ

40

Проблема решена путем предоставления «истины» в качестве третьего параметра вызова $ watch. Пожалуйста, найдите здесь, больше информации о третьем параметре,

Угловые документы на $ rootScope

    
ответ дан Abdul Azeez 07.10.2012 в 14:41
источник
  • Кто такой дьявол. 3rd Paramter: objectEquality (необязательно) - {boolean =} - Сравнить объект для равенства, а не для ссылки. –  Ryan Q 20.04.2013 в 07:56
  • Или не забудьте вызвать область. $ digest () после каждого изменения области действия, чтобы принудительно обновить контроллер –  Pencilcheck 14.06.2013 в 14:03
  • решил это для меня, спасибо! –  Moshe Shaham 12.07.2013 в 12:26
  • Спасибо, @Pencilcheck! Не для меня это работает! :-) –  Rafael Cavalcante 28.10.2016 в 20:12