你可以有父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'上的方法嗎? –