2

fooディレクティブ A のリンク関数内でオブジェクトを定義/インスタンス化すると、別のディレクティブのリンク関数から同じオブジェクトにアクセスする方法は何ですか?

4

2 に答える 2

2

ドキュメントからの引用

コントローラーはリンク前フェーズの前にインスタンス化され、他のディレクティブと共有されます (require 属性を参照)。これにより、ディレクティブが相互に通信し、相互の動作を強化することができます。

これは、同じオブジェクトまたはその子の 2 つのディレクティブ間でデータを共有するにはrequire、ディレクティブ B のオプションで注入されたディレクティブ A コントローラー内で foo を公開する必要があることを意味します。

ディレクティブは次のようになります。

.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 に答える