鑑於以下常見的設置:如何調用從嵌套指令角速度控制器範圍方法打字稿
CtrlA (page level controller)
|- directiveAA (component e.g. button bar)
|- directiveAAA (sub-component e.g. button)
我想通過使用指令屬性傳遞下來了methodA鏈調用從directiveAAA CtrlA.methodA() - CtrlA -> directiveAA -> directiveAAA
。因此,例如我的directiveAAA
「保存」按鈕可以調用控制器方法「保存」。組件directiveAA
和directiveAAA
是愚蠢的組件,只知道屬性設置的環境。
在Typescript之前,我會利用繼承範圍向下調用控制器方法$scope.save()
從directiveAAA
。
這將如何與Typescript一起工作?我們是否仍然必須將注入範圍用於控制器,指令控制器類,還是可以在不使用範圍的情況下基於類繼承來完成?
因此,這裏是我的代碼的問題 - 它可能並不完美,但給人的要點 - 這個問題的要點標有註釋「這是我需要幫助」:
module app.page {
class CtrlPage {
private ctrlPageBtnActions: string[] = ['goPrev', 'goNext'];
goPrev(){
console.log('go previous');
}
goNext(){
console.log('go next');
}
}
function pageDirective(){
return {
restrict: 'E',
replace: true,
template: '<button-bar actions="CtrlPage.ctrlPageActions"></button-bar>',
controller: CtrlPage,
controllerAs: 'ctrlPage',
bindToController: true
}
}
angular.module('app')
.directive('page', pageDirective);
}
module app.page.directives {
class CtrlBtnBar {
private actions: string[];
}
function buttonBar() {
return {
restrict: 'E',
replace: true,
template: '<div class="buttonBar"><btn action="CtrlBtnBar.actions[0]"></btn><btn action="CtrlBtnBar.actions[1]"></btn></div>'
controller: CtrlBtnBar,
controllerAs: 'CtrlBtnBar',
bindToController: {
actions: '='
}
}
}
angular.module('app')
.directive('buttonBar', buttonBar);
}
module app.page.directives {
class CtrlBtn {
private action: string;
handleClick(){
if (action === 'goNext'){
CtrlPage.goNext(); /// Here is where I need help
}
}
}
function btnDirective(){
return {
restrict: 'E',
replace: true,
template: '<input type="button" value="someCaption" ng-click="CtrlBtn.handleClick()"/>',
controller: CtrlBtn,
controllerAs: 'ctrlBtn',
bindToController: {
action: '@'
}
}
}
angular.module('app')
.directíve('btn', btnDirective);
}
如果您運行的代碼在http://www.typescriptlang.org/Playground中,您會看到打字稿可以理解爲從btnDirective控制器CtrlBtn中反對CtrlPage引用,因爲在此上下文中CtrlPage不存在。我們必須使用角度$範圍來訪問「goNext」方法,因爲btnDirective是愚蠢的,並且不知道它的父級控制器並且只接收來自其屬性的輸入?考慮到radim的提示,我想答案是肯定的。
看起來問題解決了 '這' 在控制器詞彙用法類。而這種行爲又與TS直接無關。 – estus