2

这本 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);
        }
      });
    }]);
4

2 回答 2

2

$scope只需以与or相同的方式注入它$parse, $rootScope 上定义的任何内容都可以在控制器内部访问。

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

      $rootScope.foo();

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

等等

于 2014-07-14T13:34:12.700 回答
1

如果您打算rootScope如此糟糕地使用它,它也有一个提供程序scope'$rootScope'就像你做的那样包含到你的控制器'$scope'中。

还有 which 的$parent属性$scope可能会派上用场,但 IMO 如果被滥用,它往往会降低代码的可维护性。特别是当多个范围嵌套时,您需要遍历整个层次结构。

于 2014-07-14T13:28:41.577 回答