親ディレクティブと子ディレクティブの間で分離されたスコープ (再利用可能なアイテムである可能性があります) と通信するための最良の一般的なアプローチは何かを理解しようとしています。
つまり、子ディレクティブが何らかの方法で親ディレクティブを更新する必要がある場合 (両方ともスコープが分離されている)、コールバック関数を渡す必要があります。
例えば:
.directive('filterReviewStepBox', function () {
return {
restrict: 'EA',
scop: {
//some data
},
template: '<div>text<reusable-dir></reusable-dir call-back="foo"></div>',
link: function (scope, elem, attrs) {
scope.foo = function () {
console.log('bar');
};
}
};
}).directive('reusableDir', function () {
return {
restrict: 'EA',
scope: {
callBack: '=callBack'
//other data
},
template: '<div>text<button type="button" ng-click="bar"></button></div>',
link: function (scope, elem, attrs) {
scope.bar = function () {
scope.callBack();
}
}
};
});
または $emit() を使用する必要があります:
例えば:
directive('filterReviewStepBox', function () {
return {
restrict: 'EA',
scope: {
// some data
},
template: '<div>text<reusable-dir></reusable-dir></div>',
link: function (scope, elem, attrs) {
scope.$on('foo', function () {
console.log('bar');
});
}
};
}).directive('reusableDir', function () {
return {
restrict: 'EA',
scope: { //some data
},
template: '<div>text<button type="button" ng-click="bar"></button></div>',
link: function (scope, elem, attrs) {
scope.bar = function () {
scope.$emit('foo');
};
}
};
});
もっと大きなスケールでより理解しやすいのはemitだと思いますが、パフォーマンスとオーバーヘッドが心配ですが、まだ確信が持てません
オンラインで最善のアプローチを探してみましたが、それでも踏みにじられました
編集
のことを忘れていた
必要とする
オプション。しかし、これが最も正しい解決策であるかどうかはまだわかりません。これにより、子または孫を再利用することができず、ディレクティブが単一の目的のアイテムになるためです。