Мога ли да дам на всички контролери нов метод, който засяга собствения обхват на всеки контролер?

В общи линии

Мога ли да направя така, че всички контролери да имат наблюдател, който излага променлива на локален обхват или метод, който засяга само локален обхват? Нещо като черти.

По-специално

Извън кутията искам всеки нов контролер да има налично свойство status и да го настрои в собствен обхват и наблюдател, който отправя запитване към услуга, за да зададе състоянието. Наблюдателят предава името на контролера и получава обратно информация за себе си.

В моя случай услугата е слой върху $http, който просто следи кои части от приложението правят какви заявки.

По желание бих искал да огранича тази функционалност до контролери, които инжектират тази конкретна услуга.


person km6zla    schedule 07.02.2014    source източник


Отговори (1)


Декоратор на обхват: $onRootScope

Украсява $rootScope с $onRootScope метод, както е предложено тук

app.config(['$provide', function($provide){
    $provide.decorator('$rootScope', ['$delegate', function($delegate){

        // [Object.defineProperty()][2]
        // To make sure the $onRootScope property doesn't show up unexpected when enumerating over $scope we use `Object.defineProperty()` and set enumerable to false. Keep in mind that you might need an ES5 shim.

        Object.defineProperty($delegate.constructor.prototype, '$onRootScope', {
            value: function(name, listener){
                var unsubscribe = $delegate.$on(name, listener);
                this.$on('$destroy', unsubscribe);
            },
            enumerable: false
        });

        return $delegate;
    }]);
}]);

Препратки

person km6zla    schedule 15.02.2014