这是我的第一篇文章,所以请温柔一点!
我刚开始使用TS& Angular 2几天前。现在我遇到了一个我觉得奇怪的问题。
这是我的代码:
import ...
@Injectable()
export class HttpService {
imageArray : any;
private _sessionToken : string;
res: any;
constructor( private _http: Http) {
}
getUser():Promise<any> {
console.log("Getting Post");
let headers = new Headers();
headers.append('X-Client-Token', 'XXXXXXXX');
headers.append('Content-type', 'application/json');
var data = JSON.stringify({
"login": "XXXXXX",
"password": "XXXXXXX"
});
return this._http.post('INSERT REST API', data, {headers: headers})
.map(res => res.json())
.map(this.doStuff)
.toPromise()
}
doStuff(res) {
this._sessionToken = res.token;
console.log(this._sessionToken) ==> THIS WORKS !!!!! / EXISTS
}
getFilesForJob(jobId : string):Promise<any> {
console.log(this._sessionToken); ==> THIS DOES NOT WORK !!!! / UNDEFIEND
let headers = new Headers();
headers.append('X-Client-Token', 'XXXX');
headers.append('X-Session-Token', this._sessionToken);
headers.append('Content-type', 'application/json');
return this._http.get('INSERT RESTFULL API' + jobId + '/files', {headers: headers})
.map(res => res.json())
.toPromise();
}
所以,
问题是我无法在'this._sessionToken'
中获取getFilesForJob()
,在登录功能完成后调用此函数,并设置令牌。
但是当我在this._sessionToken
内注销doStuff()
时,我确实得到了我的会话令牌。
当我在getFilesForJob()
中注销时,我得到了未定义的回复。但这些电话是在彼此之后进行的。
angular 2 / typescript是否使用组件实例?这将是我的解释为什么这不起作用。但我该如何解决呢? 我在这做错了什么?这是关于私人/公共的吗?
谢谢!
答案 0 :(得分:0)
好的,这里有一些可以发挥作用的东西。如何调用getFilesForJob
?最可能的情况是this
未正确设置。尝试在此行之前设置debugger
:
console.log(this._sessionToken); ==> THIS DOES NOT WORK !!!! / UNDEFIEND
并查看是否this: HttpService
定义了所有方法。如果不是,那么您已经失去了this
的范围,并且有很多方法可以确保this
绑定到HttpService
- 但它取决于如何调用此方法。
另外,您是否创建了此类的实例?如果您没有 - 并且您在外部调用此类,即HttpService.getFilesForJob()
,那么您必须将方法作为static
作为前缀。