Доступ к методам $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 делает код менее обслуживаемым при злоупотреблении им. В частности, когда несколько областей вложены, вам необходимо пройти всю иерархию.