【发布时间】:2017-03-24 03:16:24
【问题描述】:
我有一个返回用户对象的角度服务。用户对象有自己的属性加上一组墙。该服务向调用组件返回一个可观察对象。在服务中,我可以从 http 服务返回的 json 创建一个用户对象。但是,当我在我的组件中订阅服务时,返回的对象为 null。我在这里做错了什么?
// user.ts
import { wall } from './wall';
export class user {
Id: number;
EntryType: number;
UserType: number;
SubscriptionType: number;
IsCoach: boolean;
Username: string;
Email: string;
Name: string;
Password: string;
Created: string;
MemberWalls: wall[];
}
//wall.ts
export class wall {
Title: string;
ViewItem_Id: number;
}
//authentication.service.ts
authenticate(authRequest: login): Observable<user> {
let url: string = this.apiUrl + AppSettings.LOGIN_SERVICE;
let headers = new Headers({
'Content-Type': AppSettings.CONTENT_TYPE_HEADER, //'; charset=utf-8',
'client-secret': AppSettings.CLIENT_SECRET,
'client-id': AppSettings.CLIENT_ID
});
let options = new RequestOptions({ headers: headers });
return this._http.post(url, authRequest, options) //
.map(data => {
this.authenticated(data);
})
.catch(this.handleError);
}
private authenticated(res: Response) {
let body = res.json();
if (body.StatusCode === 200) {
localStorage.setItem('auth_token', res.headers.get("access-token"));
let user1: user = body.Data;
//The user object is fine here.
//That means that the json and the user class structure match perfectly
console.log(user1);
return body.Data || {};
}
else {
return {};
}
}
//login.component.ts
login() {
this.errorMessage = '';
this.currentUser = null;
this._authService.authenticate(this.loginModel)
.subscribe(user1 => this.currentUser = user1,
error => this.handleError( error));
//The user1 returned by the service is always null.
}
【问题讨论】:
-
你怎么知道它是空的?
-
user1 => this.currentUser = user1,是数据到达时调用的函数。您发表评论的地方的代码在此之前执行很长时间。
标签: angular typescript nested observable angular2-services