如何向所有范围添加功能..

时间:2015-06-28 08:08:14

标签: angularjs angularjs-scope

我在response.xpath上有一个我定义的函数。

我稍后在控制器范围内的控制器中使用它 - 因为它从rootScope继承了该函数。

现在,我想在使用IsolatedScopes的指令中做同样的事情。 因为他们不是原型继承自rootScope,所以我需要找到另一种方法将该函数放在每个隔离的范围上。

有没有办法在创建或其他钩子上自定义隔离范围?

更新

澄清:我需要范围的功能 - 而不是rootScope。

原因是我们使用了这个。$ on(' $ destroy' ...)。所以我们基本上都想在每次销毁我的作用域时执行代码。

当前实现:目前我覆盖rootScope并检查,如果隔离,我只需在范围上添加该功能。然而,这感觉很hackish,我想找到一个更好的解决方案。

这是我当前的代码

$rootScope.$new

2 个答案:

答案 0 :(得分:1)

啊......答案一直摆在我面前..因为这个问题错了!

我想要做的就是在每个范围(包括隔离)上分配函数。

嗯,范围有原型继承,然后只使用它!

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

    .... 

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

应该在负载的任何地方做魅力..

只是去展示 - 不要在压力下编写代码,你会更加努力工作并获得糟糕的结果.. :)

答案 1 :(得分:0)

我认为你可以将$rootScope注入指令,作为

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

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

这是一个DEMO