Sono stato fortunato e ho risposto in un commento alla domanda, ma sto postando una risposta completa per motivi di completezza e quindi possiamo contrassegnare questa domanda come "Risposta".
Dipende da cosa si vuole ottenere condividendo un controller; puoi condividere lo stesso controller (anche se hai istanze diverse) oppure puoi condividere la stessa istanza del controller.
Condividi un controller
Due direttive possono utilizzare lo stesso controller passando lo stesso metodo a due direttive, in questo modo:
app.controller( 'MyCtrl', function ( $scope ) {
});
app.directive( 'directiveOne', function () {
return {
controller: 'MyCtrl'
};
});
app.directive( 'directiveTwo', function () {
return {
controller: 'MyCtrl'
};
});
Ciascuna direttiva otterrà la propria istanza del controller, ma ciò consente di condividere la logica tra tutti i componenti desiderati.
Richiedi un controller
Se desideri condividere la stessa istanza di un controller, utilizza require
.
require
assicura la presenza di un'altra direttiva e quindi include il suo controller come parametro della funzione di collegamento. Quindi, se hai due direttive su un elemento, la tua direttiva può richiedere la presenza dell'altra direttiva e ottenere l'accesso ai suoi metodi di controllo. Un caso d'uso comune per questo è quello di require ngModel
.
^require
, con l'aggiunta del carattere di accento circonflesso, controlla gli elementi sopra la direttiva oltre all'elemento corrente per cercare di trovare l'altra direttiva. Ciò consente di creare componenti complessi in cui i "sottocomponenti" possono comunicare con il componente genitore attraverso il suo controller con grande effetto. Gli esempi potrebbero includere le schede, in cui ogni riquadro può comunicare con le schede generali per gestire la commutazione; un set di fisarmoniche potrebbe garantire che solo uno sia aperto alla volta; eccetera.
In entrambi i casi, è necessario utilizzare le due direttive insieme affinché funzioni. require
è un modo per comunicare tra i componenti.
Controlla la pagina della Guida delle direttive per maggiori informazioni: http://docs.angularjs.org/guide/directive
require
assicura la presenza di un'altra direttiva e quindi include il suo controller.^require
controlla gli elementi sopra quello corrente oltre all'elemento corrente. Quindi devi usare le due direttive insieme affinché funzioni. Altrimenti, è sufficiente definire un controller conapp.controller
e quindi utilizzarlo in entrambe le direttive. Ad ogni modo, puoi metterlo in un semplice Plunker insieme al tuo codice HTML?