2013-06-11 18 views

risposta

25

Ci sono vari modi modulo può interagire o condividere informazioni

  1. Un modulo può essere iniettato in un altro modulo, nel quale caso il modulo contenitore ha accesso a tutti gli elementi del modulo iniettato. Se si guarda il progetto angular seed, i moduli vengono creati per direttiva, controller, filtri, ecc., Come

    angular.module ("myApp", ["myApp.filters", "myApp.services", "myApp.directives "," myApp.controllers "]) Questo è più un meccanismo di riusabilità piuttosto che un meccanismo di comunicazione.

  2. La seconda opzione, come spiegato da @Eduard, è l'utilizzo dei servizi. Poiché i servizi sono singleton e possono essere iniettati in qualsiasi controller, possono fungere da meccanismo di comunicazione.

  3. Come già indicato da @Eduard, la terza opzione consiste nell'utilizzare il controller padre utilizzando l'oggetto $ scope come è disponibile per tutti i controller figlio.

  4. È inoltre possibile iniettare $ rootScope in controller che devono interagire e utilizzare i metodi $ broadcast e $ on per creare un modello di bus di servizio in cui i controller interagiscono utilizzando il meccanismo pub \ sub.

Mi sporgo verso la quarta opzione. Vedere ulteriori dettagli anche qui What's the correct way to communicate between controllers in AngularJS?

+1

Sono andando per andare con la quarta opzione. Grazie mille. –

+0

Qui sono un po 'confuso (al numero 4 per essere più specifico). La documentazione afferma che ogni app ha il suo '$ rootScope'. Quando dici che il '$ rootScope' deve essere iniettato, vuoi dire che' $ rootScope' da 'firstModule' deve essere iniettato nel controller del' secondModule'? L'app –

+2

non è un modulo. Generalmente è solo una app, con più moduli al suo interno. '$ rootscope' è condiviso tra i moduli in un'unica app. – Chandermani

3

Utilizzo del meccanismo di servizio per comunicare tra i controller del modulo.

(function() { 
     'use strict'; 

    //adding moduleB as dependency to moduleA 

    angular.module('Myapp.moduleA', ['Myapp.moduleB']) 
     .controller('FCtrl', FCtrl) 
     .service('sharedData', SharedData); 

    //adding the dependency shareData to FCtrl 

    FCtrl.$inject = ['sharedData']; 

    function FCtrl(sharedData) { 

     var vm = this; 
     vm.data = sharedData.data; 
    } 


    //shared data service 
    function SharedData() { 

     this.data = { 
     value: 'my shared data' 
     } 

    } 

    //second module 
    angular.module('Myapp.moduleB', []) 
     .controller('SCtrl', SCtrl); 

    SCtrl.$inject = ['sharedData']; 

    function SCtrl(sharedData) { 

     var vm = this; 
     vm.data = sharedData.data; 
    } 


    })(); 

E il codice HTML come segue:

<html ng-app="firstModule"> 
<body> 

    <div ng-controller="FCtrl as xyz"> 
    <input type=text ng-model="xyz.data.value" /> 
    </div> 

    <div ng-controller="SCtrl as abc"> 
    <input type=text ng-model="abc.data.value" /> 
    </div> 

</body> 
</html>