2015-06-27 42 views
1

我試圖通過轉換現有的應用程序來解決ES6和Angular問題。不出所料,挑戰是thisES6:這是什麼等於_this/self

let _$localStorage來自(Injected dependencies not accessible in class methods for AngularJS),但有一個建議,那裏不是一個好方法。

我試圖實現的下一件事情有同樣的問題,即如何在一個類中有全局變量。

歡迎諮詢

let _$localStorage; 
//^^^^^^^^^^^^^^^^^ 
class MainSvc { 
    constructor($http, $localStorage) { 
     this.$http = $http; 
     _$localStorage = $localStorage; 

     this.data = {}; 
     //^^^^^^^^ 
     this.production = (location.host === "afbackend.herokuapp.com"); 
     this.baseUrl = location.protocol + '//' + location.host; 

     console.log('MainSvc'); 
    } 

    login(data, success, error) { 
     this.$http.post(this.baseUrl + '/auth', data) 
     .success(function(res) { 
      console.log("Login succeeded, token :", res.token); 
      _$localStorage.token = res.token; 
      this.data.user = getUserFromToken(res.token); 
      //^^^^^^^^^^^^^^ 
      console.log(m); 
      // success(); 
     }) 
     // .error(error); 
    } 
} 

回答

1

的 '這個' 尚未與ES6轉變了觀念。

唯一不同的是,當你使用big arrow functions

使用大箭頭,'this'從調用函數傳遞到被調用函數(與將函數綁定到此函數相同)。

所以,你仍然可以在課堂上自由使用它,但要記住,當你使用不是大箭頭的常規匿名函數時,如果你想訪問它,你仍然需要傳遞'this'。

所以要糾正你的代碼,你應該寫。

login(data, success, error) { 
    var self = this; 
     this.$http.post(this.baseUrl + '/auth', data) 
     .success(function(res) { 
      console.log("Login succeeded, token :", res.token); 
      _$localStorage.token = res.token; 
      self.data.user = getUserFromToken(res.token); 
      //^^^^^^^^^^^^^^ 
      console.log(m); 
      // success(); 
     }) 
     // .error(error); 
    } 

其中也使用大箭頭,可以表示爲:

login(data, success, error) { 
     this.$http.post(this.baseUrl + '/auth', data) 
     .success((res) => { //Big arrow 
      console.log("Login succeeded, token :", res.token); 
      _$localStorage.token = res.token; 
      this.data.user = getUserFromToken(res.token); 
      //^^^^^^^^^^^^^^ 
      console.log(m); 
      // success(); 
     }) 
     // .error(error); 
    } 
+0

OK,這是有道理的,只是我必須聲明自己與回調的任何方法... –

+0

其實受益即使在我的簡單例子中,厚厚的空氣功能也變得非常清晰。沒有'自我'真的需要 –