在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);
}
});
}]);
答案 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如果被滥用,往往会使代码难以维护。特别是当嵌套多个范围时,您需要遍历整个层次结构。