2

If I define/instantiate an object foo inside the link function of directive A. What's a way to access the same object from the link function of a separate directive?

4

2 回答 2

2

文档中引用:

控制器在预链接阶段之前被实例化,并与其他指令共享(参见 require 属性)。这允许指令相互通信并增强彼此的行为。

这意味着要在同一对象或其子对象上的两个指令之间共享数据,您需要在指令 A 控制器中公开 foo,并require在指令 B 中注入选项。

指令如下所示:

.directive("dirA", function () {
    return {
        controller: function ($scope, $element, $attrs) {

        },
        link: function ($scope, $element, $attrs, controller) {
            controller.foo = $attrs.dirA;
        }
    }
})
.directive("dirB", function () {
    return {
        link: function ($scope, $el, $attr, controller) {
            $scope.shared = controller.foo;
        },
        require: "dirA"
    }
})

工作示例

于 2013-09-05T07:01:58.683 回答
0

我没有足够的声誉来发表评论,所以我会在这里添加它。

对于遇到相同问题的人的一些附加信息。这取决于指令相互关联的使用位置。

^ 前缀表示该指令在其父元素上搜索控制器(没有 ^ 前缀,该指令将仅在其自己的元素上查找控制器)。

于 2014-06-01T13:02:33.163 回答