2013-06-11 6 views

ответ

25

Существуют различные способы модуля могут взаимодействовать или обмениваться информацией

  1. Модуль может быть введен в другой модуль, в этом случае модуль контейнера имеет доступ ко всем элементам впрыскиваемого модуля. Если вы посмотрите на angular seed проекта, модули созданы для директивы, контроллеры, фильтры и т.д., что-то вроде этого

    angular.module ("MyApp", [ "myApp.filters", "myApp.services", «myApp.directives "," myApp.controllers "]) Это скорее механизм повторного использования, а не механизм связи.

  2. Второй вариант, как объяснил @Eduard, - использовать службы. Поскольку службы являются одноточечными и могут быть введены в любой контроллер, они могут действовать как механизм связи.

  3. Поскольку @Eduard снова указал, что третий вариант заключается в использовании родительского контроллера с использованием объекта $ scope, поскольку он доступен для всех дочерних контроллеров.

  4. Вы также можете ввести $ rootScope в контроллеры, которым необходимо взаимодействовать и использовать методы $ broadcast и $ on для создания шаблона служебной шины, в котором контроллеры взаимодействуют с использованием механизма pub \ sub.

Я бы наклонился к 4-му варианту. См. Также более подробную информацию. What's the correct way to communicate between controllers in AngularJS?

+1

Я идя с 4-м вариантом. Большое спасибо. –

+0

Я немного запутался здесь (на четвертом, если быть более конкретным). В документации указано, что каждое приложение имеет свой собственный '$ rootScope'. Когда вы говорите, что нужно вводить '$ rootScope', вы имеете в виду, что' 'rootScope' из' firstModule' необходимо ввести в контроллер 'secondModule'? –

+2

приложение не является модулем. Как правило, это только одно приложение с несколькими модулями. '$ rootscope' делится между модулями в одном приложении. – Chandermani

0

Вы можете использовать services и контроллеры наследования (описано здесь http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller)

в любом случае, вы shuold рассматривать не имеющие контроллеры tighlty в сочетании.

+1

[ссылка] (http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller) сломана вы можете это исправить –

3

Использование механизма обслуживания для связи между модульными контроллерами.

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


    })(); 

И HTML следующим образом:

<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> 
Смежные вопросы