你是對的,$parent.$parent.$parent
絕對不是一個好習慣。
如果你調用的方法是另一種指令,你可以要求指令在你的孩子的指令,然後將parentDirective的控制器功能將被注入的第四個參數的鏈接功能:
在您的DDO :
return {
require : '^parentDirective',
restrict : 'E',
link : function (scope, elem, attrs, parentDirectiveController) {}
}
如果你想叫什麼在工廠/服務,你可以注入該工廠/服務到您的指令,雖然這有時是一個代碼的氣味,這取決於你在做什麼試圖注入。
最後,另一種方法是使用事件傳播。從你的指令,你可以使用$scope.$emit
將信息發送多達父控制器:
從指令:
$scope.$emit('directiveDidStuff', {
data : 'blah'
});
在父控制器:
$scope.$on('directiveDidStuff', function (evt, params) {
this.data = params.data; // equals blah
});
來源
2015-09-02 12:52:31
sma
可能使用'event'。 – Joy