Dan*_*zel 20 typescript angular
我有这个简单的组件
import {Component} from 'angular2/core';
import {RouterLink, RouteParams} from 'angular2/router';
import {Http, Response, Headers} from 'angular2/http';
import {User} from '../../models/user';
import 'rxjs/add/operator/map';
@Component({
template: `
<h1>{{user.name}} {{user.surname}}</h1>
`,
directives: [RouterLink],
})
export class UserComponent {
user: User;
constructor(private routeParams: RouteParams,
public http: Http) {
this.user = new User();
this.http.get('http://localhost:3000/user/' + this.routeParams.get('id'))
.map((res: Response) => res.json())
.subscribe((user: User) => this.user = user);
console.log(this.user);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么不subscribe
将响应转换为完整User
对象.当我记录user
变量时,我的控制台说User {_id: undefined, name: undefined, surname: undefined, email: undefined}
.但是在视图中绑定.name
并且.surname
正在工作..
这里发生了什么?用户实际存储在哪里?
Dan*_*zel 20
在这里找到了解决方案:https://stackoverflow.com/a/29759472/2854890
我的方法现在看起来像这样:
constructor(private routeParams: RouteParams,
public http: Http) {
this.user = new User();
this.http.get('http://localhost:3000/user/' + this.routeParams.get('id'))
.map((res: Response) => res.json())
.subscribe((json: Object) => {
this.user = new User().fromJSON(json);
});
}
Run Code Online (Sandbox Code Playgroud)
我Serializable
通过最后返回对象来增强它,所以我可以省略类似的东西
var u = new User();
u.fromJSON(...);
Run Code Online (Sandbox Code Playgroud)
然后写
new User().fromJSON(json);
Run Code Online (Sandbox Code Playgroud)
Serializable
类
export class Serializable {
fromJSON(json) {
for (var propName in json)
this[propName] = json[propName];
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
Prz*_*ski 19
好的做法是使用GET响应来使用数据
Observable<Model>
Run Code Online (Sandbox Code Playgroud)
(关于Angular文档https://angular.io/guide/http)所以......
//进口
import {HttpClient} from "@angular/common/http";
Run Code Online (Sandbox Code Playgroud)
//在构造函数参数列表中
private http: HttpClient
Run Code Online (Sandbox Code Playgroud)
//服务方法
getUser(): Observable<User> {return this.http.get<User>({url}, {options});}
Run Code Online (Sandbox Code Playgroud)
您不需要再做任何事情了.我认为这种方法最友好.
归档时间: |
|
查看次数: |
52872 次 |
最近记录: |