【发布时间】:2019-07-29 09:08:47
【问题描述】:
我是 Angular 的新手,正在尝试做一个电子商务项目,所以我想根据 URL 的 queryParams 中的内容过滤我的产品。
所以假设我的网址是
http://localhost:4200/?category=Fruits
所以它应该过滤所有类别为水果的产品
这是代码
html文件
<div class="row ">
<div class="col-md-3">
<ul class="list-group" <a *ngFor="let c of categories" class="list-group-item" routerLink="/" routerLinkActive="active" [queryParams]="{category:c.name}">
{{c.name}}
</a>
</ul>
</div>
<div class="col">
<div class="row">
<ng-container *ngFor="let p of products;let i=index" class="row-eq-height">
<div class="col">
<mdb-card style="width:17rem;" class="c1">
<div class="view rgba-white-slight waves-light" mdbWavesEffect>
<mdb-card-img [src]="p?.imageurl" alt="Card image cap" class="cardimg"> </mdb-card-img>
<a>
<div class="mask"></div>
</a>
</div>
<mdb-card-body>
<mdb-card-title>
<h4>{{p?.title}}</h4>
</mdb-card-title>
<mdb-card-text>$ {{p?.price}}
</mdb-card-text>
<button mdbBtn type="button" color="primary" size="sm" mdbWavesEffect>Add to Cart</button>
</mdb-card-body>
</mdb-card>
</div>
</ng-container>
</div>
</div>
</div>
.component.ts
import { ActivatedRoute } from '@angular/router';
import { Subscription } from 'rxjs';
import { Component, OnInit, OnDestroy } from '@angular/core';
import { ProductsService } from '../services/products.service';
import { ItemsService } from '../services/items.service';
import { filter } from 'rxjs/operators';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.scss']
})
export class HomeComponent implements OnInit {
products;
categories;
query;
filteredproducts;
subscription: Subscription;
constructor(private prservice: ProductsService, private iservice: ItemsService, private activatedrouter: ActivatedRoute) { }
ngOnInit() {
this.subscription = this.iservice.getdata().subscribe(data => {
this.products = data;
console.log(this.products)
});
this.subscription = this.iservice.getitems().subscribe(categ => {
this.categories = categ;
});
this.activatedrouter.queryParams.subscribe(p => {
this.query = p['category'];
console.log(this.query)
this.filteredproducts = this.products.pipe(filter(p => p.select === this.query));
console.log(this.filteredproducts)
});
}
OnDestroy() {
this.subscription.unsubscribe();
}
}
这是我在控制台中获得的产品截图 https://ibb.co/FnKDvsk
现在我已经对“选择”应用了过滤功能来过滤产品
我面临的错误是
- 无法读取未定义的属性“管道”
- 类型“{}”上不存在属性“select”。
【问题讨论】:
-
我没有收到这一行 "this.filteredproducts=this.query?this.products.pipe()" 为什么你使用 "this.query?"在你的代码中?
-
@SnehaPawar 没关系,这只是一个额外的步骤,现在我已经编辑了它!你可以再看看。
-
错误 1:正如错误状态
this.products未定义,因此调用它的任何成员都会产生该错误。 -
我猜你在获取数据之前正在运行这条线
this.filteredproducts = this.products.pipe。你可以通过初始化像products = []这样的产品变量来快速解决这个问题;或将此行放入this.subscription = this.iservice.getdata().subscribe(data -
您的 HTML 无效;可能不是你的错误的原因,但需要注意的事情。
标签: html angular typescript