【问题标题】:$watch is not working when model is updated in scope.$apply in directive当模型在范围内更新时,$watch 不起作用。指令中的 $apply
【发布时间】:2012-10-06 18:39:00
【问题描述】:

我有一个指令,我在指令范围的“现有文件”模型上添加了一个监视。当模型通过scope.$apply发生变化时,watch中不会调用listener。

这是指令代码,如果我在这里遗漏了什么,请告诉我,

   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>

请告诉我如何确保正确观看该模型

【问题讨论】:

    标签: javascript angularjs watch


    【解决方案1】:

    问题已通过将 'true' 作为 $watch 调用的第三个参数来解决。 请在此处找到有关第三个参数的更多信息,

    Angular Docs on $rootScope

    【讨论】:

    • 谁是笨蛋。第三个参数:objectEquality(可选) - {boolean=} - 比较对象是否相等而不是参考。
    • 或者记得在每次改变作用域后调用 scope.$digest() 来强制更新控制器
    猜你喜欢
    • 1970-01-01
    • 2015-01-31
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多