У меня есть функция на 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 = ...;
Ahh.. ответ был передо мной все время.. потому что вопрос был неправильным!
Все, что я хотел сделать, это назначить функции для каждой области (включая изолированные).
Ну, области имеют прототипическое наследование, а затем просто используйте это!
var Scope = Object.getPrototypeOf($rootScope);
Scope.registerTask = function(){
....
this.$on("$destroy", function() {
...
});
};
Scope.unregisterTask = ...;
должен сделать очарование.. везде нагрузка..
просто идет, чтобы показать - не пишите код под давлением, вы будете усерднее работать и получать дрянные результаты.. :)
Я думаю, вы можете ввести $rootScope
в директиву,
app.directive('testDirective', ['$rootScope', function($rootScope) {
return {
scope : {},
link : function() {
},
controller : ['$scope', function($scope) {
$rootScope.rootScopeFunc();
}]
}
}]);
вот ДЕМО