Как добавить функцию во все области видимости ..

0

У меня есть функция на rootScope которую я определил.

Позже я использую его в контроллерах в области контроллера - поскольку он наследует функцию от rootScope.

теперь, я хотел бы сделать то же самое в директивах с изолированнымиScopes. поскольку они не прототипически унаследованы от rootScope, мне нужно найти другой способ разместить эту функцию в каждой изолированной области.

есть ли способ настроить изолированную область при создании или какой-нибудь другой крючок?

Обновить

Уточнение: мне нужна функция в области - не rootScope.

причина в том, что мы используем это. $ on ('$ destroy'...). поэтому мы в основном хотим выполнять код каждый раз, когда моя область уничтожается.

Текущая реализация: в настоящее время я переопределяю $rootScope.$new и check, если изолировано, я просто добавляю функцию в область. однако это кажется хакерским, и я хотел бы найти лучшее решение.

вот мой текущий код

    $rootScope.registerTask =  function(){

        .... 

        this.$on("$destroy", function() {
            ...
        });
    };

    $rootScope.origNew = $rootScope.$new;

    $rootScope.$new = function(isolate, parent ){

        var newScope = this.origNew(isolate, parent );

        if ( isolate ){
            newScope.unregisterTask = ...;
            newScope.registerTask = $rootScope.registerTask;
        }
        return newScope;

    };

    $rootScope.unregisterTask = ...;
Теги:
angularjs-scope

2 ответа

1
Лучший ответ

Ahh.. ответ был передо мной все время.. потому что вопрос был неправильным!

Все, что я хотел сделать, это назначить функции для каждой области (включая изолированные).

Ну, области имеют прототипическое наследование, а затем просто используйте это!

var Scope = Object.getPrototypeOf($rootScope);
Scope.registerTask =  function(){

    .... 

    this.$on("$destroy", function() {
        ...
    });
};
Scope.unregisterTask = ...;

должен сделать очарование.. везде нагрузка..

просто идет, чтобы показать - не пишите код под давлением, вы будете усерднее работать и получать дрянные результаты.. :)

0

Я думаю, вы можете ввести $rootScope в директиву,

 app.directive('testDirective', ['$rootScope', function($rootScope) {
     return {
         scope : {},
         link : function() {

         },
         controller : ['$scope', function($scope) {
             $rootScope.rootScopeFunc();
         }]
     }         
 }]);

вот ДЕМО

Ещё вопросы

Сообщество Overcoder
Наверх
Меню