被指令包装后,我如何访问它的范围?

2024-03-10

如何在指令主体中访问指令的隔离范围?我的 DOM 看起来像这样:

<div ng-app="app">    
    <directive>
        <p>boolProperty: {{boolProperty|json}}</p>
    </directive>
</div>

The boolProperty在指令的内部分配link功能:

angular.module("app", []).directive("directive", function() {
    return {
        scope: {},
        link: function($scope) {
            $scope.boolProperty = true;
        }
    };
});

问题是,孩子<p>指令内部绑定到指令的parent范围,而不是指令的独立范围。我怎样才能克服这个问题?

单击此处获取 jsFiddle。 http://jsfiddle.net/akashivskyy/Y9g4q/


您的代码中有几个问题。

  1. 默认限制选项是Afor 属性,所以无论如何你的指令都不会被编译,因为你将它用作元素。使用restrict: 'E'使其发挥作用。
  2. 根据文档,嵌入元素的范围不是指令的子范围,而是同级范围。所以boolProperty总是未定义或为空。因此,您必须提高范围级别并找到合适的兄弟姐妹。

    <div ng-app="app">
       <directive>
        <p>boolProperty: {{$parent.$$childHead.boolProperty}}</p>
        </directive>
    </div>
    

并且需要在指令中使用嵌入:

angular.module("app", []).directive("directive", function() {
    return {
        restrict: 'E',
        scope: {},
        transclude: true,
        template: '<div ng-transclude></div>',
        link: function(scope) {
            scope.boolProperty = true;
        }
    };
});

然而,这种方法是不可取的,如果您在指令之前添加一个新的控制器,那么稍后会中断,因为嵌入的范围将成为第二个同级,而不像以前的第一个。

<div ng-app="app">
    <div ng-controller="OneCtrl"></div>
    <directive>
        <p>boolProperty: {{$parent.$$childHead.boolProperty || $parent.$$childHead.$$nextSibling.boolProperty}}</p>
    </directive>
</div>

Here is the Working Demo http://jsfiddle.net/Y9g4q/4/. The approach I mentioned is not ideal so use at your own risk. The @CodeHater' s answer is the one you should go with. I just wanted to explain why it did not work for you.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

被指令包装后,我如何访问它的范围? 的相关文章

随机推荐