我试图了解在具有隔离范围的父子指令之间进行通信的最佳通用方法是什么(它们可能是可重用的项目)。
意思是如果子指令需要以某种方式更新父指令(两者都有独立的范围),我应该传递一个回调函数:
例如:
.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');
};
}
};
});
我觉得在更大的范围内发射会更容易理解,但担心性能和开销,但我仍然不确定
尝试在网上寻找最好的方法,但我仍然跺着脚
编辑
我忘记了
要求
选项。但我仍然不确定这是最正确的解决方案。因为这不允许我重用孩子或孙子,并且有点使指令成为单一用途的项目。