E 'pratica comune?
Sì, è prassi comune, le direttive devono spesso accedere a $ scope per variabili e chiamare metodi (come LoadMoreTweets
).
Anche nel official docs hanno esempi come ..
scope.$watch(...)
... fom all'interno di una direttiva (in cui il controller potrebbe essere fare modifiche alla variabile guardato).
È del tutto appropriato che una direttiva comunichi con un controller in questo modo.
È possibile iniettare un controller stesso (non solo l'ambito) nel metodo link
di una direttiva. Esamina la sezione "Funzione di collegamento" di http://docs.angularjs.org/guide/directive.
"Il controller è condiviso tra tutte le direttive, che consente alle direttive di utilizzare i controller come canale di comunicazione."
Ma potrebbe Io uso un servizio?
Certo che si potrebbe. La domanda è: perché? Se si sta lavorando con una singola pagina (che visualizza i tweet ad esempio) e il controller ha già una variabile $scope.tweets
e il metodo $scope.loadMoreTweets
, si stanno complicando le cose se si tenta di inserire un servizio lì dove non è necessario.
D'altra parte i servizi sono perfetti per dati di applicazione, come il profilo utente. Se la tua direttiva ha bisogno di accedere all'utente attualmente connesso, allora ha molto senso farlo tramite il servizio.
Dalla documentazione:
servizi angolari sono single che svolgono compiti specifici comuni alle applicazioni web, come ad esempio il servizio http $ che fornisce l'accesso a basso livello per oggetto XMLHttpRequest del browser.
Se si dispone di un'attività a livello di applicazione che è più adatto per un singleton, utilizzare in ogni caso un servizio. Se hai solo bisogno di accedere/modificare $ scope da una direttiva, parla direttamente al controller o attiva un evento a cui il controller può rispondere.
Questo è praticamente il significato dei servizi, suppongo. Solo i miei due centesimi ... – fjdumont