2013-11-01 141 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