隔离范围打破了。$观察

时间:2013-09-20 15:10:44

标签: javascript angularjs

因此,我有一个很好的removeDialog指令:

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

现在我开始玩isoleted范围了。我注意到的第一件事是增加孤立的范围打破了。观察。 触发器更改时,我不会收到通知。

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

你能详细说明原因吗?

1 个答案:

答案 0 :(得分:2)

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