4

是否有可能,如果可以,如何装饰$scope,使所有范围都有一些额外的功能/属性?

我正在尝试这样做:

$provide.decorator('$scope', function($scope)
{
    $scope.cakes = true;
    return $scope;
});

但它爆炸了:

未知提供者:$scopeProvider来自 App。

知道我可以向 中添加属性和函数,$rootScope并且它将在原型上继承,但我希望指令中的隔离范围也可以访问这些添加的内容。

4

2 回答 2

9

我有同样的问题。

只需扩展 $rootScope 原型。那么隔离作用域也会有这个方法。

这是我尝试使用 lodash debounce 函数作为本机范围方法:

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/

于 2013-12-20T17:44:26.940 回答
0

这似乎不可能,但我想说这就是隔离作用域的全部意义所在。

您可以做的是通过 访问装饰的东西scope.$root,但是对于许多用例,它会破坏目的,因为添加的功能仍然只能访问$rootScope而不是您孤立的。

于 2013-08-05T18:37:27.393 回答