你可以有父directive
一些东西的名称作为outerDir
在所有领域的投入,这将有自己的控制器具有editEnded
& editCanceled
方法暴露。通过内部指令可以通过像require: '^outerDir'
标记
<div outer-dir on-edit-end="editEnded()" on-edit-cancel="editCanceled()">
<input edit-directive ng-model="foo"/>
<input edit-directive ng-model="bar"/>
</div>
指令
app.directive('outerDir', function(){
return {
scope: {
onEditEnd: '&',
onEditCancel: '&'
},
link: function(scope, attr){
},
controller: function(scope){
scope.editEndedEvent = scope.onEditEnd;
scope.editCancelledEvent = scope.onEditCancel;
}
}
})
app.directive('editDirective', function(){
return {
require: '^outerDir', //this line will get controller of `outerDir` directive
link: function(scope, attr, outerDirController){ //controller is available in 4th parameter
//on edit call parent directive controller method
scope.onEdit = function(){
outerDirController.editEndedEvent(); // call edit
}
scope.onCancel = function(){
outerDirController.editCancelledEvent(); // call cancel
}
}
}
})
与
^
(表示父)提内
require
选择前缀父指令名可以访问那些方法
所以你真正的问题是'editEnded'和'editCanceled'是'$ rootScope'上的方法吗? –