Ich habe Schwierigkeiten, eine Eltern-Controller-Funktion in einer verschachtelten Direktive aufzurufen, die sich rekursiv selbst kompiliert. Ein Klick auf die Schaltfläche in tree-item
funktioniert eine Ebene tief, aber danach sind die Variablen für doc
und type
undefiniert.Übergeben von Argumenten an die Eltern-Controller-Methode in der verschachtelten rekursiven Direktive
Diese Art von Problem ist trivial gelöst mit React, aber ich denke, neue Bereiche werden mit jedem Funktionsdurchlauf erstellt, wenn ich wirklich nur die Callback-Referenz vom Eltern übergeben möchte.
Ich denke, das könnte durch das Auslösen von Ereignissen gelöst werden, ist das eine schlechte/gute Idee?
Eltern Controller-Methode:
displayDocument(doc, type) { /* */ }
zu tree
Richtlinie weitergegeben wird:
<tree display-document="vm.displayDocument(doc, type)"></tree>
Tree
Definition:
function Tree() {
return {
restrict: 'E',
replace: true,
templateUrl: 'components/ui/biospecimen/templates/tree.html',
scope: {
displayDocument: '&',
}
}
}
Bestanden zu tree-item
Richtlinie von tree.html
:
<tree-item display-document="displayDocument(doc, type)"></tree-item>
TreeItem
Definition:
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))
}
}
}
Und dann schließlich verwendet innen tree-item
:
<button data-ng-click="displayDocument({ doc: doc, type: type })">Click</button>