2013-11-01 106 views
0

控制器访问实例函数我有一个控制器,它看起来像这样:

function controller($scope) 
{ 
    this.helper() = function() 
    { 
    // some processing 
    }; 

    $scope.doSomething = function() 
    { 
    helper(); 
    }; 
} 

当DoSomething的是所谓的,我得到一个错误,该助手()没有定义。将“this”放在helper()的调用前面不起作用,因为这里的'this'指向$ scope而不是控制器实例。

我的问题是:有没有办法从范围内的函数内调用这样的本地帮助函数? (我知道我也可以在$ scope上放置helper(),但宁愿不要,因为它完全是一个方便的功能,而不是从视图中调用的东西。)

这样构造代码的原因是便于单元测试中的helper()函数的单独测试。

回答

0
function controller($scope) 
{ 
    this.helper() = function() 
    { 
    // some processing 
    }; 
    var helperScope = this; 

    $scope.doSomething = function() 
    { 
    helperScope.helper(); 
    }; 
} 

当然,给它比一个更具描述性的名称,但其基本思想是分配this到你想要的范围内的变量。

+0

谢谢,这有效,即使有点凌乱。对于doSomething本身内的当前控制器实例,没有办法要求angularjs? –

+0

@ErikJ不,不幸的是,JS没有能力做到这一点。 – Doorknob