使用 Angular 从 API 访问数据(格式错误?)
Accessing data from API with Angular (formatting error?)
我试图从 API 访问的数据格式如下:
{
“array1”:[
{"id”:1, ”someProperty”:”A"},
{"id":2, "someProperty”:”B”}
],
“array2”:[
{"id”:1, ”anotherProperty”:”foo”, ”lastProperty”:”foo2”},
{"id":2, "anotherProperty”:”bar”, ”lastProperty”:”bar2”}
]
}
依赖项class:
import { FirstArray } from './first-array';
import { SecondArray } from './second-array';
export class Dependencies {
constructor(
public array1: Array<FirstArray>,
public array2: Array<SecondArray>
) { }
}
第一个数组class:
export class FirstArray {
constructor(
public id: number,
public someProperty: string
) { }
}
第二个数组class:
export class SecondArray {
constructor(
public id: number,
public anotherProperty: string,
public lastProperty: string
) { }
}
我的依赖项service.ts 文件:
/** GET all Dependencies from the server */
getAllDependencies (): Observable<Dependencies[]> {
return this.http.get<Dependencies[]>(apiUrl).pipe(
tap(allDependencies => this.log('fetched allDependencies')),
catchError(this.handleError('getAllDependencies', []))
);
}
component.ts 文件:
ngOnInit() {
this.getAllDependencies();
console.log("allDependencies:",this.allDependencies);
}
allDependencies: Dependencies[];
getAllDependencies(): void {
this.DependenciesService.getAllDependencies()
.subscribe(allDependencies => this.allDependencies = allDependencies);
}
当我在组件文件中尝试 console.log(this.allDependencies) 时,结果未定义。数据从 API 中正确检索 - 'fetched allDependencies' 打印在日志中,我可以通过从服务文件中进行字符串化来在日志中打印 Dependencies 对象:
/** GET all Dependencies from the server */
getAllDependencies (): Observable<Dependencies[]> {
return this.http.get<Dependencies[]>(apiUrl).pipe(
tap(allDependencies => this.log(JSON.stringify(allDependencies))),
catchError(this.handleError('getAllDependencies', []))
);
}
我的问题:如何从我的组件文件访问这些数据?我想我的数据结构中某处遗漏了一些东西,或者我遇到了与 Typescript 相关的错误,但我不确定。
您遇到的最大问题是,在您的组件中,调用服务的方法是 void
而 return 没有任何东西...
它并没有真正增加任何价值,所以删除它并像这样访问数据:
ngOnInit() {
this.DependenciesService.getAllDependencies()
.subscribe(allDependencies => {
this.allDependencies = allDependencies;
console.log(this.allDependencies); // multi-line with log.
});
}
根据您的评论更新:
将您的方法从 getAllDependencies(): void
更改为 getAllDependencies(): Observable<Dependencies[]>
并在 ngOnOnit
内调用
getAllDependencies(): Observable<Dependencies[]> {
return this.DependenciesService.getAllDependencies();
}
ngOnInit() {
this.getAllDependencies().subscribe(.....);
}
我试图从 API 访问的数据格式如下:
{
“array1”:[
{"id”:1, ”someProperty”:”A"},
{"id":2, "someProperty”:”B”}
],
“array2”:[
{"id”:1, ”anotherProperty”:”foo”, ”lastProperty”:”foo2”},
{"id":2, "anotherProperty”:”bar”, ”lastProperty”:”bar2”}
]
}
依赖项class:
import { FirstArray } from './first-array';
import { SecondArray } from './second-array';
export class Dependencies {
constructor(
public array1: Array<FirstArray>,
public array2: Array<SecondArray>
) { }
}
第一个数组class:
export class FirstArray {
constructor(
public id: number,
public someProperty: string
) { }
}
第二个数组class:
export class SecondArray {
constructor(
public id: number,
public anotherProperty: string,
public lastProperty: string
) { }
}
我的依赖项service.ts 文件:
/** GET all Dependencies from the server */
getAllDependencies (): Observable<Dependencies[]> {
return this.http.get<Dependencies[]>(apiUrl).pipe(
tap(allDependencies => this.log('fetched allDependencies')),
catchError(this.handleError('getAllDependencies', []))
);
}
component.ts 文件:
ngOnInit() {
this.getAllDependencies();
console.log("allDependencies:",this.allDependencies);
}
allDependencies: Dependencies[];
getAllDependencies(): void {
this.DependenciesService.getAllDependencies()
.subscribe(allDependencies => this.allDependencies = allDependencies);
}
当我在组件文件中尝试 console.log(this.allDependencies) 时,结果未定义。数据从 API 中正确检索 - 'fetched allDependencies' 打印在日志中,我可以通过从服务文件中进行字符串化来在日志中打印 Dependencies 对象:
/** GET all Dependencies from the server */
getAllDependencies (): Observable<Dependencies[]> {
return this.http.get<Dependencies[]>(apiUrl).pipe(
tap(allDependencies => this.log(JSON.stringify(allDependencies))),
catchError(this.handleError('getAllDependencies', []))
);
}
我的问题:如何从我的组件文件访问这些数据?我想我的数据结构中某处遗漏了一些东西,或者我遇到了与 Typescript 相关的错误,但我不确定。
您遇到的最大问题是,在您的组件中,调用服务的方法是 void
而 return 没有任何东西...
它并没有真正增加任何价值,所以删除它并像这样访问数据:
ngOnInit() {
this.DependenciesService.getAllDependencies()
.subscribe(allDependencies => {
this.allDependencies = allDependencies;
console.log(this.allDependencies); // multi-line with log.
});
}
根据您的评论更新:
将您的方法从 getAllDependencies(): void
更改为 getAllDependencies(): Observable<Dependencies[]>
并在 ngOnOnit
getAllDependencies(): Observable<Dependencies[]> {
return this.DependenciesService.getAllDependencies();
}
ngOnInit() {
this.getAllDependencies().subscribe(.....);
}