web-dev-qa-db-ja.com

モデルがスコープで更新されると、$ watchが機能しません。$ applyinディレクティブ

ディレクティブスコープの「existingfiles」モデルにウォッチを追加したディレクティブがあります。 scope。$ applyを介してモデルに変更があった場合、watchのリスナーへの呼び出しはありません。

これがディレクティブコードです。ここで何かが足りない場合はお知らせください。

   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>

モデルが適切に監視されていることを確認する方法を教えてください

17
Abdul Azeez

$ watch呼び出しの3番目のパラメーターとして「true」を指定することで問題が解決されました。 3番目のパラメータの詳細については、こちらをご覧ください。

$ rootScopeのAngularDocs

40
Abdul Azeez