在Controller中访问$ rootScope方法

时间:2014-07-14 12:49:06

标签: javascript angularjs rootscope

this ng-book JSBin中,由于原型继承,$scope.$watch()会解析为$rootScope.$watch()

我们可以在控制器中明确注入$rootScope,以便$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);
        }
      });
    }]);

2 个答案:

答案 0 :(得分:2)

只需按照与$scope$parse相同的方式注入,然后可以在控制器内访问$ rootScope上定义的任何内容。

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

      $rootScope.foo();

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

答案 1 :(得分:1)

如果您打算如此严重地使用rootScope,它就像scope一样有提供者。将<{1}}包含在控制器中就像使用'$rootScope'一样。

'$scope'的{​​{1}}属性也可以派上用场,但IMO如果被滥用,往往会使代码难以维护。特别是当嵌套多个范围时,您需要遍历整个层次结构。