2014-07-14 5 views
1

this ng-book JSBin에서 $scope.$watch()은 프로토 타입 상속으로 인해 $rootScope.$watch()으로 해결됩니다.

$scope이 컨트롤러 내부에 $rootScope과 똑같이 삽입 될 수 있습니까? 프로토 타입 상속을 거치지 않고 컨트롤러 내에 있습니까?

참조를 위해 여기에 코드를 복제 :

// open this example and type person.name into the test field 
    angular.module('myApp', []) 
    .controller('MyController', 
    ['$scope', '$parse', function($scope, $parse) { 

     $scope.person = { 
     name: "Ari Lerner" 
     }; 

     $scope.$watch('expr', function(newVal, oldVal, scope) { 
     if (newVal !== oldVal) { 
      // Let's set up our parseFun with the expression 
      var parseFun = $parse(newVal); 
      // Get the value of the parsed expression, set it on the scope for output 
      scope.parsedExpr = parseFun(scope); 
     } 
     }); 
    }]); 
+0

가 주입 될 수있다, 그것은되지 않습니다 '같은 $로 scope'하지만,'$의 scope' 여전히 루트 – charlietfl

+0

ohkay 좋지만 방법의 자녀가 될 것인가? – Mahesha999

답변

2

그냥 $scope 또는 $parse과 같은 방식으로 삽입하면 컨트롤러 내에서 $ rootScope에 정의 된 항목에 액세스 할 수 있습니다.

app.controller('MyController', ['$scope', '$parse', '$rootScope', 
    function($scope, $parse, $rootScope) { 

     $rootScope.foo(); 

     console.log($rootScope.bar); 
    } 
]); 

1

당신이 그렇게 심하게 rootScope를 사용하려는 경우, 그것은 scope가하는 것처럼 공급자를 가지고있다. '$rootScope'을 컨트롤러에 포함 시키려면 '$scope'을 사용해야합니다.

$scope$parent 속성도 유용 할 수 있지만 악용되면 코드를 관리하기가 쉽지 않습니다. 특히 여러 범위가 중첩되어있는 경우 전체 계층을 트래버스해야합니다.

관련 문제