2014-02-05 4 views
1

어떤 것이 가장 좋고, 어떤 상황에서 다른 쪽보다 선호되는 상황인지 궁금합니다. 컨트롤러 1과 2 모두 컨트롤러 홈페이지의 범위에 액세스 할 수 있기 때문에컨트롤러 간의 통신 Angularjs, 서비스 또는 상위 컨트롤러

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

그래서 우리는 여기에 통신 할 수 있습니다 : 우리는 부모 (주) 컨트롤러를 사용하는 경우 다음과 같이

셋업이다. 우리가 서비스를 사용하는 경우

다른 방법

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

그래서 내가 무엇을 우리가하고 있다고 생각하는 것은 우리가 컨트롤러 서비스를 주입한다는 것입니다이다.

나는 두 가지 해결책을 모두 보았지만 어떤 것이 선호되는지 알지 못합니다.

답변

2

서비스를 사용하는 것이 좋습니다. 상위 컨트롤러를 사용하여 통신하면 캡슐화가 깨지지 않습니다. 프리미티브 및 범위 상속 등의 제한에 대해 알지 못하는 사람이 있으면 버그가 발생할 수 있습니다. Angular의 종속성 주입이 효과적이며 코드가 더 유연 해집니다. 그렇게하면 장기간 뛰게됩니다.

서비스의 또 다른 이점은 코드 가독성입니다. Controller 1Controller Main의 내용을 참조하면 코드를 읽는 사람이 그 코드의 출처를 알 수 없습니다. 당신이 주사하는 것을 보았던 서비스로, 당신은 그것을 찾을 곳을 즉시 알 수 있습니다.

+0

예, 나는 부모 컨트롤러는 쉽게 생각하고 시작 길쭉하지만 다음은 읽기 위해 더 많은 모듈과 쉽게 다른 컨트롤러를 분리하고 그 사이에 "브리지"를 사용하는 경우 코드를 작성하십시오. 또한 코드를 확장하고 유지하는 것이 더 쉽고 버그를 쉽게 감지 할 수 있다고 생각합니다. 내 첫 번째 솔루션은 실제로 상위 컨트롤러 였지만 지금까지는 범위 아이디어에 익숙하지 않았기 때문에 조금만 봤지만 대신이 서비스를 도입하여 새로운 방식으로 작업을 수행했습니다. –

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

이것은 컨트롤러간에 통신 할 필요가없는 공유 설정을위한 것입니다. –

관련 문제