AとBの再利用可能なコンポーネントがあるとしましょう。BがAのメソッドを呼び出すようにしたい(もちろん、BがAの子である場合のみ)。また、Bをスタンドアロンコンポーネントとして(Aを親として使用せずに)使用したい。このような場合、存在しないAのメソッドを呼び出さないでください。私の最初の試みは、コントローラーをリンク関数に入れることでした(Bで指定したのとまったく同じ方法で、require: "^A"
Bをスタンドアロンコンポーネントとしても使用したいので、コントローラーを使用できません)。ただし、これは機能しません。
var module = angular.module("mymodule", []);
// <A>
module.directive("A", function() {
return {
restrict: "E",
transclude: true,
replace: true,
scope: {},
controller: function($scope, $element, $attrs) {
this.register = function() {
console.log("Hooray!");
};
},
template:
'<div class="ng-a" ng-transclude></div>'
};
});
// <B>
module.directive("B", function() {
return {
restrict: "E",
transclude: true,
replace: true,
scope: {},
link: function($scope, $element, $attrs, refA) {
if (refA !== undefined) {
refA.register();
} else {
console.log("Standalone");
}
},
controller: function($scope, $element, $attrs) {
// Do something.
},
template:
'<div class="ng-b" ng-transclude></div>'
};
});
ユースケースの場合:
<A><B></B></A><B></B>
コンソール出力は次のようになります。
Hooray!
Standalone
何か案は?ありがとう!