Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 隔离作用域中断属性$observe_Javascript_Angularjs - Fatal编程技术网

Javascript 隔离作用域中断属性$observe

Javascript 隔离作用域中断属性$observe,javascript,angularjs,Javascript,Angularjs,由于这个问题,我有我的nice removeDialog指令: 现在我开始玩隔离示波器。我注意到的第一件事是添加隔离作用域会破坏attr.$observe。当触发器更改时,我不会收到通知 homesApp.directive("removeDialog", function ($parse) { return { scope: { }, restrict: 'A', link: function (scope, elem

由于这个问题,我有我的nice removeDialog指令:

现在我开始玩隔离示波器。我注意到的第一件事是添加隔离作用域会破坏attr.$observe。当触发器更改时,我不会收到通知

homesApp.directive("removeDialog", function ($parse) {
    return {
        scope: {

        },
        restrict: 'A',
        link: function (scope, element, attrs, controller) {
            angular.element(element).on('hidden.bs.modal', function () {
                scope.$apply(function () {
                    scope.cancelRemove();
                });
            });
            attrs.$observe('trigger', function (newValue) {
                if (newValue) {
                    angular.element(element).modal('show');
                } else {
                    angular.element(element).modal('hide');
                }
            });
        },
        controller: 'DeleteController'
    };
});

你能解释一下原因吗?

触发器的内容不再绑定到外部作用域。您需要在隔离范围中声明它:

scope: {
    trigger: '='
}
这将
scope.trigger
绑定到您在应用该指令的元素上定义的实际表达式

这样,
attrs.$observe('trigger',function(newValue){…}
应该更改为

scope.$watch('trigger', function (newValue) {
            if (newValue) {
                angular.element(element).modal('show');
            } else {
                angular.element(element).modal('hide');
            }
        });

好的。我想我明白了。不过还有一个问题:如果我使用隔离作用域,我将scope.trigger绑定到实际表达式(这是不带{{}}的表达式),那么当我不使用隔离作用域并使用attrs访问它(表达式带{}})时,触发器会发生什么情况?@dragonfly我不清楚会发生什么。你没有一个实际的例子来说明你正在尝试做什么吗?我的意思是:当使用attrs.$observe('trigger',…)时,我的指令有trigger={expression},而当使用隔离作用域时,我必须将其更改为trigger=expression。我不明白为什么这两种方法都需要{{}@dragonfly我理解你的困惑。angularjs的作者在命名处理插值的API时应该更加明确(例如
attrs.$observe
),因为这是理解整个指令的一个障碍——这已经是一个困难的主题。但是这个评论框太小,无法讨论所有这些,我希望我已经帮到你了!祝你好运。你为什么不试试
scope:true
而不是
scope:{}