2013-06-11 14 views

Odpowiedz

25

Istnieją różne sposoby, moduł może oddziaływać lub udostępniać informacje

  1. Moduł może być wstrzyknięty do innego modułu, w którym to przypadku moduł pojemnik ma dostęp do wszystkich elementów wtryskiwanego modułu. Jeśli spojrzeć na angular seed projekcie moduły tworzone są w przypadku dyrektywy, Sterowniki, filtry itp, coś takiego

    angular.module ("myApp" [ "myApp.filters", "myApp.services", „myApp.directives "," myApp.controllers "]) Jest to raczej mechanizm re usability niż mechanizm komunikacji.

  2. Drugą opcją jest wyjaśnienie, że @Eduard będzie używał usług. Ponieważ usługi są pojedynczo i mogą być wstrzykiwane do dowolnego kontrolera, mogą działać jako mechanizm komunikacji.

  3. Jako że @Eduard ponownie wskazał, trzecią opcją jest użycie kontrolera nadrzędnego za pomocą obiektu $ scope, ponieważ jest on dostępny dla wszystkich kontrolerów podrzędnych.

  4. Możesz również wprowadzić $ rootScope do kontrolerów, które muszą wchodzić w interakcje i używać metod $ broadcast i $ on, aby utworzyć wzorzec szyny serwisowej, w którym kontrolery współdziałają z mechanizmem pub \ sub.

Chciałbym skłaniać się w kierunku 4 opcji. Zobacz także tutaj więcej szczegółów: What's the correct way to communicate between controllers in AngularJS?

+1

jestem pójdzie z czwartą opcją. Dziękuję Ci bardzo. –

+0

Jestem trochę zdezorientowany (na nr 4, aby być bardziej szczegółowym). Dokumentacja stwierdza, że ​​każda aplikacja ma swój własny $ $ rootScope. Kiedy mówisz, że '$ rootScope' wymaga wtryśnięcia, masz na myśli to, że' $ rootScope' z 'firstModule' musi zostać wstrzyknięty do kontrolera' secondModule'? Aplikacja –

+2

nie jest modułem. Zasadniczo jest to tylko jedna aplikacja z wieloma modułami. '$ rootscope' jest współdzielony przez moduły w jednej aplikacji. – Chandermani

3

Używanie mechanizmu serwisowego do komunikacji między kontrolerami modułu.

(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; 
    } 


    })(); 

I HTML następująco:

<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> 
Powiązane problemy