Ich versuche, eine Smart-table-Richtlinie aus einer benutzerdefinierten Richtlinie zu generieren Ich habe definiert:Richtlinie innerhalb einer anderen Richtlinie - Anwendungsbereich var undefined
<div ng-controller="myContrtoller">
<containing-directive></containing-directive>
</div>
Die Richtlinie Definition:
angular.module('app')
.directive('containingDirective', function() {
return {
restrict: 'E',
replace: true,
template: '<table st-table="collection" st-pipe="scopeFun"></table>',
link: function(scope, elem, attrs) {
scope.scopeFun = function() {
// solve the misteries of life
}
}
}
});
Wie Sie sehen können, versucht meine Direktive, das Element durch die Vorlage zu ersetzen, die durch die st-pipe
Direktive generiert wurde, abhängig von der ersten, kurz:
Problem:
Die st-pipe
Richtlinie prüft den Umfang var stPipe
wenn sie definiert ist oder nicht: if (ng.isFunction(scope.stPipe))
. Dies erweist sich IMMER als undefiniert. Durch Inspektion fand ich zwei Dinge:
- Von der
stPipe
Richtlinie soll den Wertscope.stPipe
sein, die meinscopeFun
in meinemcontainingDirective
istundefined
auf demscope
Objekt, sondern imscope.$parent
Objekt definiert definiert ist. Wenn ich meine$scope.scopeFun
innerhalb dermyContrtoller
definiere, habe ich kein Problem, alles funktioniert.
Lösung:
ich eine Lösung finden habe, aber ich weiß nicht, was wirklich los ist:
- Set
replace: false
imcontainingDirective
- Definieren Sie die
scope.scopeFun
im pre -link Funktion voncontainingDirective
:
- Warum ist die
scopeFun
in demstPipe
Richtliniescope
Objekt, wenn in der Steuerung definiert und warum ist es in denscope.$parent
zur Verfügung, wenn in dencontainingDirective
definiert? - Was ist wirklich los mit meiner Lösung, und ist es möglich, eine sauberere Lösung zu finden?