Angular 中通过 ID 获取数据 2/4
Get Data Through ID in Angular 2/4
我有一个采购订单列表,我想要另一个组件来保存每个采购订单的详细信息。如何通过获取其 ID 获取每个采购订单的详细信息?我需要通过获取 purchase_order.id 来显示 material_purchase_orders。通过单击 viewDetail(),它将导航到新组件并显示特定的采购订单详细信息
html
<div class="card-block" *ngFor="let order of orders">
<h2 class="proj-name">{{ order.name }}</h2>
<table>
<thead>
<tr>
<th>Transaction Date</th>
<th>Reference Number</th>
<th>Grand Total</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let inner of order.purchase_orders">
<td>{{ inner.transaction_date }}</td>
<td>{{ inner.reference }}</td>
<td> {{ inner.total }} ringgit </td>
<td><button type="submit" class = "btn btn-sm btn-primary" (click)="viewDetail(inner.id)"><i class="fa fa-angle-right" aria-hidden="true"></i> View More Details</button></td>
</tr>
</tbody>
</table>
</div>
ts
getAllOrders(){
this.subscription = this.purchaseOrderService.getAll()
.subscribe(
(data:any) => {
this.orders = data.purchaseOrders;
console.log(data);
},
error => {
console.log(error);
});
}
viewDetail(id){
this.router.navigate(['orders', id]);
}
service.ts
getAll() {
if(!this.orders) {
this.orders = this.httpClient.get<any>(this.url)
.map((response => response))
.publishReplay(1)
.refCount();
}
return this.orders
}
service.ts
将此方法添加到 service.ts 文件
getOrder(id: any) {
this.orders = this.getAll();
const selectedOrder = this.orders.find(order => order.id === id)
return selectedOrder;
}
使用参数读取详细查看使用这个,
ngOnInit(): void {
this.route.params.forEach((params: Params) => {
if (params['id'] !== undefined) {
const id = +params['id'];
this.navigated = true;
this.purchaseOrderService.getOrder(id)
.then(order => this.order = order);
} else {
this.navigated = false;
}
});
}
有关详细信息,请参阅此源代码 https://github.com/johnpapa/angular-tour-of-heroes/tree/master/src/app
您要获取的是数组中嵌套数组中的一项。我看到这可以通过几种方式处理。
您可以将选择的订单存储在服务中并在
导航到详细信息页面。缺点是数据不可用
在页面刷新。
如果你可以控制后端,你可以这样做,选择的订单
可以直接根据id从db中获取。 (这将是我的
选择)
如果您无法控制后端,我知道您需要
迭代 orders
,然后迭代 inner
以找到匹配的顺序
这个选择的顺序。
因此对于最后一个选项,您的代码应如下所示:
getOrder(id) {
return this.getAll()
.map(data => {
// iterate the top level
for (let order of data.purchaseOrders) {
// find the order
let ord = order.purchase_orders.find(x => x.id === id)
if(ord)
return ord;
}
})
}
在你的细节组件中,就像 Dimithu 一样,我们获取参数并调用 getOrder
:
constructor(private route: ActivatedRoute,
private purchaseOrderService: PurchaseOrderService) {}
ngOnInit(): void {
this.route.paramMap
.switchMap((params: ParamMap) =>
this.purchaseOrderService.getOrder(+params.get('id')))
.subscribe(order => this.order = order);
}
DEMO
我有一个采购订单列表,我想要另一个组件来保存每个采购订单的详细信息。如何通过获取其 ID 获取每个采购订单的详细信息?我需要通过获取 purchase_order.id 来显示 material_purchase_orders。通过单击 viewDetail(),它将导航到新组件并显示特定的采购订单详细信息
html
<div class="card-block" *ngFor="let order of orders">
<h2 class="proj-name">{{ order.name }}</h2>
<table>
<thead>
<tr>
<th>Transaction Date</th>
<th>Reference Number</th>
<th>Grand Total</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let inner of order.purchase_orders">
<td>{{ inner.transaction_date }}</td>
<td>{{ inner.reference }}</td>
<td> {{ inner.total }} ringgit </td>
<td><button type="submit" class = "btn btn-sm btn-primary" (click)="viewDetail(inner.id)"><i class="fa fa-angle-right" aria-hidden="true"></i> View More Details</button></td>
</tr>
</tbody>
</table>
</div>
ts
getAllOrders(){
this.subscription = this.purchaseOrderService.getAll()
.subscribe(
(data:any) => {
this.orders = data.purchaseOrders;
console.log(data);
},
error => {
console.log(error);
});
}
viewDetail(id){
this.router.navigate(['orders', id]);
}
service.ts
getAll() {
if(!this.orders) {
this.orders = this.httpClient.get<any>(this.url)
.map((response => response))
.publishReplay(1)
.refCount();
}
return this.orders
}
service.ts
将此方法添加到 service.ts 文件
getOrder(id: any) {
this.orders = this.getAll();
const selectedOrder = this.orders.find(order => order.id === id)
return selectedOrder;
}
使用参数读取详细查看使用这个,
ngOnInit(): void {
this.route.params.forEach((params: Params) => {
if (params['id'] !== undefined) {
const id = +params['id'];
this.navigated = true;
this.purchaseOrderService.getOrder(id)
.then(order => this.order = order);
} else {
this.navigated = false;
}
});
}
有关详细信息,请参阅此源代码 https://github.com/johnpapa/angular-tour-of-heroes/tree/master/src/app
您要获取的是数组中嵌套数组中的一项。我看到这可以通过几种方式处理。
您可以将选择的订单存储在服务中并在 导航到详细信息页面。缺点是数据不可用 在页面刷新。
如果你可以控制后端,你可以这样做,选择的订单 可以直接根据id从db中获取。 (这将是我的 选择)
如果您无法控制后端,我知道您需要 迭代
orders
,然后迭代inner
以找到匹配的顺序 这个选择的顺序。
因此对于最后一个选项,您的代码应如下所示:
getOrder(id) {
return this.getAll()
.map(data => {
// iterate the top level
for (let order of data.purchaseOrders) {
// find the order
let ord = order.purchase_orders.find(x => x.id === id)
if(ord)
return ord;
}
})
}
在你的细节组件中,就像 Dimithu 一样,我们获取参数并调用 getOrder
:
constructor(private route: ActivatedRoute,
private purchaseOrderService: PurchaseOrderService) {}
ngOnInit(): void {
this.route.paramMap
.switchMap((params: ParamMap) =>
this.purchaseOrderService.getOrder(+params.get('id')))
.subscribe(order => this.order = order);
}