在开发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 –