2016-12-03 53 views
1

我有這個樣本登錄頁面,我試圖將存儲數據(用戶數據)的返回對象到存儲,所以我可以得到它並在其他頁面中使用它...因爲數據是以json Object(array)的形式...我不知道這是如何完成的,我試圖將其串化,但有些錯誤!設置和獲取對象從存儲在離子2

login.ts:

@Component({ 
     selector: 'page-login', 
     templateUrl: 'login.html' 
     }) 
      export class LoginPage { 

      login: {username?: string , password?: string} = {}; 
      submitted = false; 
      loginDetails: any; 



      constructor(public navCtrl: NavController, private schoolAppUsers: SchoolAppUsers, 
      public userData: UserData, public storage: Storage, public globalService: GlobalService) { 

      this.globalService=globalService; 
      this.schoolAppUsers=schoolAppUsers; 
      this.userData=userData; 
     } 

      onLogin(form) { 

      this.submitted = true; 

      if (form.valid) { 

       this.schoolAppUsers.login(this.login) 
      .then(loginDetails => { 

       this.loginDetails = loginDetails; 
       this.navCtrl.setRoot(TabsPage); 
       // console.log(loginDetails); 
      }); 

       this.userData.login(this.login.username); 
       this.userData.loginDetails(this.loginDetails); 

     } 
    } 
} 

當我的控制檯日誌://console.log(loginDetails);這是輸出(對象): [{「error」:「false」,「UserID」:1,「name」:「yasir」,「username」:「yasir12」,「password」:「123」角色「:1}]

所以我試圖通過它:this.userData.loginDetails(this.loginDetails);

userData.ts:

@Injectable() 
    export class UserData { 
    constructor(public events: Events, public storage: Storage) {} 

     loginDetails(loginDetails) { 
      this.setLoginDetails(loginDetails); 
     }; 

    setLoginDetails(loginDetails) { 
     this.storage.set('loginDetails', JSON.stringify(loginDetails)); 
     }; 

    getLoginDetails() { 
     return this.storage.get('loginDetails').then((value) => { 
     return value && JSON.parse(value); 
     }); 
    }; 

我這是如何試圖在其他頁面,這時候我控制檯登錄其返回「空」或「不確定」

loginDetails: any; 

ngAfterViewInit() { 
    this.getUserdetails(); 
} 

getUserdetails() { 
    this.userData.getLoginDetails().then((loginDetails) => { 
    this.loginDetails = loginDetails; 
    console.log(this.loginDetails); 
    }); 
} 
可以

有人拿到請幫忙!

+0

這裏同樣也是因爲這個 –

+0

我不知道任何更新,即時插得太深,甚至在離子2論壇,沒有人回答 –

回答

2
if (form.valid) { 

      this.schoolAppUsers.login(this.login) 
     .then(loginDetails => { 

      this.loginDetails = loginDetails; 
      this.navCtrl.setRoot(TabsPage); 
      // console.log(loginDetails); 
     }); 

      this.userData.login(this.login.username); 
      this.userData.loginDetails(this.loginDetails); 

    } 

這就是問題所在。你的promise.then()是異步的。 甚至在它設置在this.loginDetails之前,您正試圖保存userData中的loginDetails。 你應該這樣做:

this.userData.loginDetails(this.loginDetails); 

裏面的登錄方法。

UPDATE 變化

return value && JSON.parse(value); 

return value || JSON.parse(value); 
+0

我還是得到了一個未定義 –

+0

其實這次我得到[對象對象],在哪裏接近我認爲 –

+0

在getUserdetails()輸出屏幕上是[對象對象] 但在它下面console.log 我得到undefined –