是否有可能,如果是这样,如何装饰$scope
以便所有范围都有一些额外的功能/属性?
我正在尝试这样做:
$provide.decorator('$scope', function($scope)
{
$scope.cakes = true;
return $scope;
});
但它爆炸了:
来自App。
的未知提供商:$scopeProvider
我知道我可以向$rootScope
添加属性和函数,它将原型继承,但我希望指令中的隔离范围也可以访问这些添加的内容。
答案 0 :(得分:9)
我遇到了同样的问题。
只需扩展$ rootScope原型。 然后,孤立的范围也将采用这种方法。
这是我尝试使用lodash去抖功能作为原生范围方法:
angular.module('Test', [])
.config(function($provide) {
$provide.decorator('$rootScope', function ($delegate) {
$delegate.__proto__.$$busy = 0;
$delegate.__proto__.$watchDebounce = function (watchExpression, listener, objectEquality){
var _scope = this;
var debouncedListener = _.debounce(function (newValue, oldValue, scope){
listener(newValue, oldValue, scope);
_scope.$$busy = 0;
scope.$digest();
}, 1000);
var wrappedListener = function (newValue, oldValue, scope){
_scope.$$busy = 1;
debouncedListener(newValue, oldValue, scope);
}
return this.$watch(watchExpression, wrappedListener, objectEquality);
}
return $delegate;
})
})
此处的工作示例http://jsfiddle.net/3ncct/
答案 1 :(得分:0)
这似乎不可能,但我会说这是 isolate 范围的重点。
你可以做的是通过scope.$root
访问装饰的东西,但是对于许多用例,它会失败,因为添加的功能仍然只能访问$rootScope
而不是孤立的。{/ p>