使用 Angular HttpClient 从 Rest Request 获取 "Real Objects"(字段和方法)
Get "Real Objects" (fields and methods) from Rest Request with Angular HttpClient
所以我遇到了与 问题相同的问题。
这个问题是在 2017 年发布的,所以我想知道现在有没有 better/easier 方法可以做到这一点?
我想到的最佳方案是 HttpInterceptor,因此服务和 classes 看起来像这样:
@Injectable({
providedIn: 'root'
})
export class ExampleService {
constructor(private http: HttpClient) { }
getHouse(): Observable<House> {
return this.http.get<House>("MyRestPath");
}
}
然后 class 像这样使用它
someRandomMethod(): void {
this.exampleService.getHouse().subscribe(house => {
console.log(house.doSomething()) // Notice the method here
console.log(house.address) // aswell as a field
})
}
这可能吗,还是我们仍然必须像上面提到的 question/answers 那样做?
拦截器可以用来存档它。对于维护此代码的任何开发人员来说,这就像魔法一样。这将是一个非常复杂的问题:HTTP 客户端会从后端请求数据并将其包装到另一个对象中。 The single responsibility principle 建议我们避免使用它。服务肯定是处理此类逻辑的更好地方。
export class ExampleService {
constructor(private http: HttpClient) { }
getHouse(): Observable<House> {
return this.http.get<HouseDto>("MyRestPath")
.pipe(map(house => new House(house)));
}
}
所以我遇到了与
这个问题是在 2017 年发布的,所以我想知道现在有没有 better/easier 方法可以做到这一点?
我想到的最佳方案是 HttpInterceptor,因此服务和 classes 看起来像这样:
@Injectable({
providedIn: 'root'
})
export class ExampleService {
constructor(private http: HttpClient) { }
getHouse(): Observable<House> {
return this.http.get<House>("MyRestPath");
}
}
然后 class 像这样使用它
someRandomMethod(): void {
this.exampleService.getHouse().subscribe(house => {
console.log(house.doSomething()) // Notice the method here
console.log(house.address) // aswell as a field
})
}
这可能吗,还是我们仍然必须像上面提到的 question/answers 那样做?
拦截器可以用来存档它。对于维护此代码的任何开发人员来说,这就像魔法一样。这将是一个非常复杂的问题:HTTP 客户端会从后端请求数据并将其包装到另一个对象中。 The single responsibility principle 建议我们避免使用它。服务肯定是处理此类逻辑的更好地方。
export class ExampleService {
constructor(private http: HttpClient) { }
getHouse(): Observable<House> {
return this.http.get<HouseDto>("MyRestPath")
.pipe(map(house => new House(house)));
}
}