因此,由于这个问题,我有了一个不错的removeDialog指令:

Updating attrs value inside directive - how to do it in AngularJS

现在我开始玩isoleted示波器。我注意到的第一件事是添加孤立的作用域破坏了attrs。$ 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'
    };
});


你能解释为什么吗?

最佳答案

trigger的内容不再受限于外部范围。您需要在隔离范围中声明它:

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');
            }
        });

关于javascript - 孤立的作用域中断attrs。$ observe,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18920155/

10-11 12:22