【发布时间】:2018-09-24 13:19:38
【问题描述】:
我对 Angular 和 typescript 非常陌生,并且一直在阅读一些关于返回类型化数据的帖子。有些文章声明您必须在从服务返回对象后映射您的对象,其他文章只需在调用中键入结果。 Angular 6 中获取强类型数据的最简单方法是什么?以下不起作用我真的需要手动映射每个属性吗?
我的模特:
export interface MenuItem {
menuItemsId:number;
groupCode: number;
groupDescription: string;
subGroupCode:number;
subGroupDescription:string;
itemCode:number;
itemDescription:string;
grade:string;
remark:string;
}
我的服务:
getValues():Observable<MenuItem[]>{
return this.httpClient.get<MenuItem[]>("https://hafnia-asset-control-dev.azurewebsites.net/api/menuitems/cosmetic");
}
呼叫:
var t = this.apiService.getValues().subscribe((data) => {
this.menuItems = data;
console.log(this.menuItems);
});
JSON 结果:
[{"menuItemsId":1,"groupCode":1000,"groupDescription":"xxx","subGroupCode":1000,"subGroupDescription":"SHELL","itemCode":1001,"itemDescription":"ccc","grade":"Int","remark":"String"},{"menuItemsId":2,"groupCode":1000,"groupDescription":"COSMETIC","subGroupCode":1000,"subGroupDescription":"xxx","itemCode":1002,"itemDescription":"xxx","grade":"Int","remark":"String"}
app.module:
providers: [AdalService, AdalGuard,{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }],
拦截器:
import { Injectable } from '@angular/core';
import { HttpEvent,HttpHandler,HttpRequest,HttpInterceptor } from '@angular/common/http';
import { AdalService } from 'adal-angular4';
import { Observable } from 'rxjs';
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private adalService: AdalService) { }
intercept(req: HttpRequest<any>, next:HttpHandler): Observable<HttpEvent<any>>{
const authHeader = this.adalService.userInfo.token;
const authReq = req.clone({headers: req.headers.set('Authorization', `Bearer ${authHeader}`)});
return next.handle(authReq);
}
}
【问题讨论】:
-
如果你的API数据具有相同的属性,你不需要一一映射,它应该可以工作。但请注意,您定义的构造函数不会被调用,因为键入服务调用更方便和清晰
-
你应该使用
get<MenuItem[]>而不是get<Array<MenuItem>>,并且只有当该URL返回一个与MenuItem匹配的数组时它才会起作用,否则你会看起来没有数据 -
@mast3rd3mon -
you should use get<MenuItem[]> not get<Array<MenuItem>>Array<Type> VS Type[] in Typescript -
谢谢大家。我更新了代码是有道理的。但是我仍然得到一个对象列表。见主帖中的图片。
-
谢谢@mast3rd3mon 我试过你的建议,但还是一样:( typeof data[0] "object"
标签: angular