Доступ к методам $rootScope в контроллере

В этой нг-книге 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 ответа

Решение

Просто введите его так же, как $scope или же $parseвсе, что определено в $rootScope, будет доступно внутри вашего контроллера.

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

      $rootScope.foo();

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

и т.п.

Если вы собираетесь использовать rootScope так плохо, у него есть провайдер так же, как scope делает. В том числе '$rootScope' в ваш контроллер, как вы делаете с '$scope' делает трюк.

Там также $parent атрибут $scope что может пригодиться, но IMO делает код менее обслуживаемым при злоупотреблении им. В частности, когда несколько областей вложены, вам необходимо пройти всю иерархию.

Другие вопросы по тегам