1

AngularJS ng-view 외부의 매개 변수를 업데이트 할 때 Service을 사용하거나 Scope Inheritance을 사용하는 것이 더 효과적입니까?AngularJS : 서비스 뷰와 외부의 액세스 매개 변수에 대한 상속 서비스

저는 ng-view 및 공통 헤더가있는 AngularJS 페이지가 있습니다. ng-view의 사이를 이동할 때 나는 싶습니다 :

  1. 갱신 공통의 헤더 제목
  2. 을 적절한 탐색 메뉴 항목을 선택합니다.

이렇게하려면 두 가지 일반적인 해결책을 읽었습니다. 첫 번째는 컨트롤러간에 변수를 전달할 수있는 서비스를 제공하는 것입니다. 여러 곳에서 설명 간단하고 직선적 솔루션은 여기에 포함 :

<body ng-controller="MainCtrl"> 
    <!-- stuff --> 

    <h1>{{ common.pageTitle }}</h1> 
    <ng-view></ng-view> 

    <!-- more stuff --> 
</body> 
: AngularJS: How can I pass variables between controllers?

내가 찾은 두 번째 방법과 같이, 범위 상속을 활용하고 부모 컨트롤러 내 ng-view을 포장했다

myApp.controller('MainCtrl', function ($scope) 
{ 
    $scope.common = []; 

    $scope.common.pageTitle = "Set by MainCtrl"; 
}); 

myApp.controller('SplashCtrl', function ($scope) 
{ 
    $scope.common.pageTitle = "Set by SplashCtrl!" 
}); 

다른 통해 하나를 사용 사이의 성능 저하가 있습니까 :

그런 다음 내 컨트롤러에서 나는 다음을 수행 할 수 있습니다? 내가 아직 깨닫지 못했던 것을 사용하면 숨겨진 "잡았다"를 발견 할 수 있을까요?

+1

MainCtrl을 사용한 접근 방식은 매우 좋지 않습니다. http://stackoverflow.com/a/21428102/356380. 좋은 해결책은 http://stackoverflow.com/a/21488757/356380을 참조하십시오. 내 마지막 업데이트를 찾는다. – Whisher

답변

1

상속에 대해 서비스 또는 패턴을 사용하는 것이 좋습니다. 어떤 것이 있는지 알기가 더 어렵습니다. 명시적인 방법이 없다면 수정하는 것이 무엇인지 알아내는 것이 더 어렵습니다.

지금까지 성능이 향상되었지만 무엇이 더 빠를 지 모르겠지만, 당신이, 당신의 특정 성능 문제

에 대한 해결책을 찾기 위해 필요한 때까지 다음 컨트롤러 방송을 할 수있는 이벤트 패턴 경로를 가고 싶어하는 경우 t 성능에 대해 걱정 뭔가했다

$rootScope.broadcast('eventname', { event data }); 

및 메뉴/메인 컨트롤러에이 같은 메시지를 소비

$scope.$on('eventname', function(event, data){ 

     // update menu state... 

}); 

나를위한 숨겨진 'gotcha'는 범위 상속에서 여러 단계로 진행된 후에 테스트 코드를 작성하기 시작하면서 '상위'컨트롤러를 모두 인스턴스화해야하고 테스트가 지나치게 복잡해졌습니다. 빠른

관련 문제