2014-02-05 3 views
1

Мне интересно, какая из лучших практик или, возможно, в какой ситуации один из способов предпочтительнее другого.Связь между контроллерами Angularjs, сервисным или родительским контроллером

Установка выглядит следующим образом, если мы используем родительскую (основной) контроллер:

<div ng-controller="Controller Main"> 
    <div ng-controller="Controller 1"></div> 
    <div ng-controller="Controller 2"></div> 
</div> 

Таким образом, мы можем общаться здесь, потому что оба контроллера 1 и 2 имеют доступ к области контроллера Main в.

Другой путь, если мы используем службу,

<div ng-controller="Controller 1"></div> 
<div ng-controller="Controller 2"></div> 

Так что я думаю, что мы делаем, что мы вводим услугу к контроллерам.

Я видел оба решения, но не знаю, какой из них предпочтительнее.

ответ

2

Предпочтительно использовать услугу. Коммуникация с использованием родительского контроллера прерывает инкапсуляцию, не говоря уже о том, что она может быть довольно плохой, если вы получаете кого-то, кто не знает об ограничениях примитивов и наследования областей и т. Д. Угловая инъекция зависимостей работает очень хорошо, и ваш код будет более гибким в если вы это сделаете.

Другим преимуществом услуги является читаемость кода. Если Controller 1 ссылается на что-то в Controller Main, человек, читающий код, может не знать, откуда он. С услугой, которую вы видите, она вводится, вы сразу же знаете, где ее искать.

+0

Да, я начал с мышления родительский контроллер проще, но тогда это более модульным и легче читать кода, если вы разделяете разные контроллеры и используете «мост» между ними. Я также считаю, что проще расширять и поддерживать код таким образом и, возможно, легче обнаруживать ошибки. Мое первое решение было на самом деле родительским контроллером, потому что до сих пор мне действительно очень нравится идея области, но потом я немного поработал с Google и вижу новый способ внедрения сервисов для выполнения этой задачи. –

0

Вы можете использовать как:

'use strict'; 
       (function(window, angular, undefined) { 
        'use strict'; 
        angular.module('ctrl.parent', []) 
         .controller('ParentController',function (scope) { 
          scope.vocalization = ''; 
          scope.vocalize = function() { 
           console.log(scope.vocalization); 
          }; 
        }); 
       })(window, angular); 
       angular.module('app',['ctrl.parent']) 
        .controller('ChildCtrl', function($scope,$controller){ 
        angular.extend($scope, new $controller('ParentController', {scope:$scope})); 
$scope.vocalization = 'CIP CIP'; 
       }); 

гляньте angularjs-share-config-directives-between-controllers

это удлиненно

+0

Я еще не знаком с концепцией расширения, но я рассмотрю ее. –

+0

Это для совместного использования конфигурации, не обязательно обмениваясь данными между контроллерами. –

Смежные вопросы