Ich hatte Glück und beantwortete dies in einem Kommentar zu der Frage, aber der Vollständigkeit halber poste ich eine vollständige Antwort, damit wir diese Frage als "Beantwortet" markieren können.
Dies hängt davon ab, was Sie durch die gemeinsame Nutzung eines Controllers erreichen möchten. Sie können entweder denselben Controller gemeinsam nutzen (obwohl Sie unterschiedliche Instanzen haben), oder Sie können dieselbe Controller-Instanz gemeinsam nutzen.
Teilen Sie einen Controller
Zwei Direktiven können denselben Controller verwenden, indem sie dieselbe Methode an zwei Direktiven übergeben:
app.controller( 'MyCtrl', function ( $scope ) {
// do stuff...
});
app.directive( 'directiveOne', function () {
return {
controller: 'MyCtrl'
};
});
app.directive( 'directiveTwo', function () {
return {
controller: 'MyCtrl'
};
});
Jede Direktive erhält eine eigene Instanz des Controllers. Auf diese Weise können Sie die Logik jedoch auf beliebig viele Komponenten verteilen.
Benötigen Sie einen Controller
Wenn Sie dieselbe Instanz eines Controllers gemeinsam nutzen möchten , verwenden Sie require
.
require
stellt das Vorhandensein einer anderen Direktive sicher und schließt dann deren Controller als Parameter für die Verbindungsfunktion ein. Wenn Sie also zwei Direktiven für ein Element haben, kann Ihre Direktive das Vorhandensein der anderen Direktive erfordern und Zugriff auf ihre Controller-Methoden erhalten. Ein häufiger Anwendungsfall hierfür ist das Erfordernis ngModel
.
^require
Überprüft mit dem Caret zusätzlich zum aktuellen Element die Elemente über der Direktive, um zu versuchen, die andere Direktive zu finden. Auf diese Weise können Sie komplexe Komponenten erstellen, bei denen "Unterkomponenten" über die Steuerung mit der übergeordneten Komponente effektiv kommunizieren können. Beispiele könnten Registerkarten sein, in denen jeder Bereich mit den gesamten Registerkarten kommunizieren kann, um das Umschalten zu handhaben. Ein Akkordeonset könnte sicherstellen, dass jeweils nur eines geöffnet ist. etc.
In beiden Fällen müssen Sie die beiden Anweisungen zusammen verwenden, damit dies funktioniert. require
ist eine Art der Kommunikation zwischen Komponenten.
Weitere Informationen finden Sie auf der Leitfadenseite der Richtlinien: http://docs.angularjs.org/guide/directive
require
stellt das Vorhandensein einer anderen Richtlinie sicher und schließt dann deren Controller ein.^require
prüft zusätzlich zum aktuellen Element Elemente über dem aktuellen. Sie müssen also die beiden Anweisungen zusammen verwenden, damit dies funktioniert. Andernfalls definieren Sie einfach einen Controller mitapp.controller
und verwenden Sie ihn dann in beiden Anweisungen. Wie auch immer, können Sie dies zusammen mit Ihrem HTML-Code in einen einfachen Plunker einfügen?