2015-09-15 50 views
0

我使用的類的成員函數是AngularJS控制器: 注意:下面的代碼是從一些TypeScript代碼編譯的。AngularJS:當AngularJS控制器是類的成員函數時,'this'是什麼?

function Clazz(x) { 

    this.Member = x; 

    this.Func= function ($scope) {   
     $scope.message = '' + this.Member; // this.Member is undefined 
    } 
} 


app.controller('TaxCtrl', new Clazz('Hello').Func ); 

Func被稱爲當我切換到TaxCtrl,但this似乎不是的Clazz的實例,因爲this.Member永遠是不確定的。

回答

1

FuncClazz實例的成員時,這將起作用。當角度構造函數作爲對象時,正在創建一個新對象,其中this正在引用Func的實例。

這裏是一個jsbin例如:

http://jsbin.com/rocopiwila/edit?js,console

如果你想下到控制器使用服務,而不是注射共享特性。

+0

所以角'new'內部控制?我認爲它只是稱爲控制器功能。 – Zach

+0

我假設如此。您可以在函數中使用'this'來爲構建的控制器設置屬性。除非您使用事件或手動調用'$ apply'或'$ digest',否則實際上不需要作用域。 –

0

試試這個:

function Clazz(x) { 

    this.Member = x; 
    self = this; 

    this.Func= function ($scope) {   
     $scope.message = '' + self.Member; 
    } 
} 


app.controller('TaxCtrl', new Clazz('Hello').Func ); 
+0

謝謝。但是我的代碼是從一些Typescript代碼編譯的,所以我不能在'Func'中添加'self' – Zach

相關問題