在開發ionic2項目時,我創建了一個新的供應商,但在MyClass中設置變量時遇到一些困難。Ionic2:處理供應商
import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';
import 'rxjs/add/operator/map';
@Injectable()
export class MyClass {
token_acces: any;
token_room: any;
constructor(private http: Http) {
this.token_acces = null;
this.token_room = null;
}
login(id,pwd){
let headers = new Headers();
headers.append('Content-Type', 'application/json');
this.http.post('/localhost/',
JSON.stringify({
username: id ,
password: pwd
}), {headers : headers})
.map(res => res.json())
.subscribe(data=>{
this.token_acces = data;
});
}
getToken(){
return this.token_acces;
}
}
的主要問題是,login()
不設置token_access
這是null
當我打電話的getToken()
。
此外,我有一個疑問,這個供應商被我的應用程序中的所有頁面使用。 例如網頁包含:
...
export class HomePage {
id: any;
pwd: any;
constructor(public navCtrl: NavController, public myClassService: MyClass) { }
login(): void{
this.myClassService.login(this.id, this.pwd);
this.navCtrl.push(SearchPage, { token : this.myClassService.getToken()});
}
}
如果我做同樣的另一個頁面,例如:
export class SearchPage {
token: any;
constructor(public navCtrl: NavController, public myClassService: MyClass) { }
...
我使用同一個實例或它的MyClass不同istance等我無法獲取上一頁中設置的值?
如果提供程序在'ngModule'中聲明,則您將擁有相同的實例。至於沒有收到令牌,http調用是異步的,它可能還沒有設置值。 –
在按鈕按下時,我在提供程序中執行http.post,在新頁面加載後,它從提供程序獲取值,但它仍未設置。我如何等待http.post完成他的處理? – pittuzzo
在提供程序中的http post上創建一個Observable。將該Observable返回到調用類/方法。在調用類中訂閱此Observable。現在,在調用類中,在'subscribe()'中做任何你需要做的事情。看看http://stackoverflow.com/questions/42160061/ionic-2-login-component-and-auth-service –