Ich verwende eine Drittanbieter-Richtlinie in meiner eckigen App. Ich muss die Funktionalität mit meiner eigenen Anweisung erweitern und stieß auf einige Probleme mit der Reihenfolge, in der die Direktiven instanziiert sind.Abhängigkeiten von Direktiven
Die Richtlinien sollen wie folgt verwendet werden:
<third-party-dir ng-repeat="item in items" my-additional-dir>
<some-content />
</third-party-dir>
Jedes Mal, wenn ein Element hinzugefügt i auf third-party-dir
je einen Code ausgeführt werden soll. Jedoch wird zuerst my-additional-dir
installiert und somit wurde die third-party-dir
- link
Funktion noch nicht ausgeführt. Ich habe versucht, Abhängigkeiten mit "require" hinzuzufügen, aber da thirdPartyDir
keinen Controller verwendet (nur die Link-Funktion), wirft Winkel einen Fehler.
.directive('myAdditionalDir', function(){
return {
require: '^thirdPartyDir'
restrict: 'A'
link: function(scope, element, attrs){
if (scope.$last){
//some code
}
}
}
})
Error: [$compile: ctreq] Controller 'thirdPartyDir', required by directive 'myAdditionalDir', can't be found!
schaute ich in Pre- und Post-Link-Funktionen, aber die Standard-Link-Funktion ist bereits eine Post-Link-Funktion. Irgendwelche Hinweise darauf, wie ich "warten" kann, dass die third-party-dir
vor Ausführung des Codes innerhalb meiner Direktive installiert wird?
Wenn Sie eine Direktive benötigen, wird der Controller dieser Direktive als 4. Argument in die Link-Funktion der Sub-Direktive eingefügt. Ich denke, der Fehler, dem Sie gegenüberstehen, ist, weil eckig nach dem Controller der übergeordneten Richtlinie sucht und ihn nicht finden kann. –
Option 'require' funktioniert nur für Anweisungen mit * controller *. Wenn 'Third-Party-dir 'keinen * Controller * hat, können Sie' require:'^thirdPartyDir'' nicht verwenden. –