我努力在遞歸編譯自身的嵌套指令中調用父控制器函數。點擊tree-item
中的按鈕可以工作一個級別,但在此之後,doc
和type
的變量未定義。嵌套遞歸指令將參數傳遞給父控制器方法
這種類型的問題用React進行了簡單的解決,但我認爲新的範圍正在用每個函數傳遞創建,當我真的只想傳遞來自父類的回調引用時。
我認爲這可以通過發射事件來解決,這是一個壞/好主意?
父控制器的方法:
displayDocument(doc, type) { /* */ }
向下傳遞到tree
指令:
<tree display-document="vm.displayDocument(doc, type)"></tree>
Tree
定義:
function Tree() {
return {
restrict: 'E',
replace: true,
templateUrl: 'components/ui/biospecimen/templates/tree.html',
scope: {
displayDocument: '&',
}
}
}
傳遞給tree-item
指令從tree.html
:
<tree-item display-document="displayDocument(doc, type)"></tree-item>
TreeItem
定義:
function TreeItem($compile) {
return {
restrict: 'E',
replace: true,
templateUrl: 'components/ui/biospecimen/templates/tree-item.html',
scope: {
displayDocument: '&',
},
link: (scope, el, attrs) => {
el.append($compile([
'<tree',
'data-ng-repeat="childType in [\'foo\', \'bar\']"',
'display-document="displayDocument(doc, type)"',
'></tree>'
].join(' '))(scope))
}
}
}
然後終於裏面用tree-item
:
<button data-ng-click="displayDocument({ doc: doc, type: type })">Click</button>