2014-10-20 3 views
1

AngularJS 응용 프로그램에서 모든 Scopes를 가져올 수있는 방법이 있는지 궁금합니다. 그래서 모두 동일한 레벨에서 조작하고 지시문 방식이나 순서로 구성 할 수 있습니까?AngularJS 응용 프로그램에서 모든 Scopes 가져 오기

지시문 인스턴스의 모든 범위를 가져 오는 방법이 있습니까?

이럴 수없는 경우 - 이유를 설명하거나 나에게이 아이디어에 어떻게 접근하겠습니까?

+0

당신은 모든 범위에서 글로벌 액세스 할 수 있도록 $ rootScope''사용할 수 있습니다 ... 또는 당신은'$을 확인하여'$의 scope' 체인을 통과하는 방법을 쓸 수있다 부모 ' – tymeJV

+0

당신은 잘 구성된 응용 프로그램에서 이것을 할 필요가 없습니다. 이것으로 정확히 무엇을 달성하려고합니까? – Blazemonger

+0

index.html 상단에 정의 할 수있는 메인 컨트롤러를 사용할 수 있습니다. 해당 범위를 객체로 정의하고 응용 프로그램에서 동일한 범위 변수를 사용할 수 있습니다 –

답변

1

$scope objects은 모두 후드 아래 연결된 목록입니다. 반드시 추천할만한 것은 아니지만 스코프의 사유 속성을 사용하여 $rootScope에서 해당 체인을 트래버스하거나 원하는 시작 지점을 사용할 수 있습니다.

다음은 각 범위를 뱉어 내고 해당 목록에 $id을 연결하여 해당 계층을 보존하는 지시문이있는 <ul>을 작성하는 간단한 예입니다.

(function() { 
 

 
    function ShowScope($rootScope) { 
 

 
    function renderScope(scope, elem, level) { 
 
     var level = (level || 1); 
 
     var li = angular.element('<li>'); 
 
     var p = angular.element('<p>'); 
 
     p.text(scope.$id); 
 

 
     li.addClass('level-' + level); 
 
     li.append(p); 
 

 
     if (scope.$$childHead) { 
 

 
     var ul = angular.element('<ul>'); 
 
     
 
     renderScope(scope.$$childHead, ul, level + 1); 
 
     
 
     li.append(ul); 
 
     } 
 
     
 
     if(scope.$$nextSibling){ 
 
     renderScope(scope.$$nextSibling, elem, level); 
 
     } 
 

 
     elem.append(li); 
 
    } 
 

 
    return { 
 
     restrict: 'E', 
 
     link: function(scope, elem, attrs) { 
 
     scope.$watch(function() { 
 

 
      elem.empty(); 
 

 
      var ul = angular.element('<ul>'); 
 
      ul.addClass('list-unstyled'); 
 
      renderScope($rootScope, ul); 
 
      elem.append(ul); 
 
     }); 
 
     } 
 
    }; 
 
    } 
 
    ShowScope.$inject = ['$rootScope']; 
 

 
    angular.module('scope-app', []) 
 
    .directive('showScope', ShowScope); 
 

 
}());
.level-1{ 
 
    background-color:rgb(255, 0, 0); 
 
} 
 

 
.level-2{ 
 
    background-color:rgb(200, 0, 0); 
 
} 
 

 
.level-3{ 
 
    background-color:rgb(150, 0, 0); 
 
}
<script src="http://code.angularjs.org/1.3.0/angular.js"></script> 
 
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet" /> 
 

 
<!-- --> 
 
<div class="container" ng-app="scope-app" ng-init="nums=[1,2,3,4,5]"> 
 
    <div class="row"> 
 
    <div class="col-sm-12"> 
 
     <show-scope></show-scope> 
 
    </div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="col-sm-12"> 
 
     <div ng-repeat="n1 in nums"> 
 
     <p ng-repeat="n2 in nums"> 
 
     {{n1}}:{{n2}} 
 
     </p> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

관련 문제