单击事件不显示结果 (Angular)
Results not displayed with click event (Angular)
我是 Whosebug 和 Angular 的新手。我正在 Angular 中编写前端应用程序(电子商务)。我将点击事件绑定到垫子菜单的按钮,以便具有以下行为:当我点击按钮时,我想显示已点击类别的产品。例如,如果我单击“彩妆”按钮,我希望显示类别为“彩妆”的所有产品。问题是,当我点击按钮时,浏览器上没有显示任何内容,但我想应用程序的逻辑是有效的,因为如果我打开浏览器的控制台,则会打印出所选类别的产品。
product.component.html:
<mat-menu #menu="matMenu">
<button mat-menu-item (click)="categoryFilter('Make-up')"> Make-up</button>
...
</mat-menu>
product.component.ts:
@Component({
selector: 'app-product',
templateUrl: './product.component.html',
styleUrls: ['./product.component.css'] })
export class ProductComponent implements OnInit {
public products: Product[] = [];
public product!: Product;
constructor(private productService: ProductService) { }
ngOnInit() {
this.getProducts();
}
public getProducts(): void{
this.productService.getProducts().subscribe(
(response: Product[]) => {
this.products= response;
},
(error: HttpErrorResponse) => {
alert(error.message);
}
);
}
public categoryFilter(category: string): void{
this.productService.getProductsByCategory(category).subscribe(
(response: void) => {
console.log(response);
},
(error. HttpErrorResponse)=>{
alert(error.message);
}
)
} }
我认为您错过了将响应绑定到 属性,然后使用那个 属性 在浏览器上显示数据。
我不知道响应类型,出于演示目的,假设它是一个字符串。
首先,您需要像创建 public product!: Product;
一样创建一个 属性,我们称之为 categoryName: string
在点击事件中,您必须将此 属性 与您的响应绑定,因此它应该如下所示:
public categoryFilter(category: string): void{
this.productService.getProductsByCategory(category).subscribe(
(response: string) => {
this.categoryName = response;
console.log(response);
},
(error. HttpErrorResponse)=>{
alert(error.message);
}
)
}
现在您必须将 categoryName
绑定到您的 HTML 中,以便它可以显示。您可以使用 Angular 的文本插值,它使用花括号 {{}} 在 HTML 中显示字符串值。
因此,您的 HTML 将如下所示:
<mat-menu #menu="matMenu">
<button mat-menu-item (click)="categoryFilter('Make-up')"> {{ categoryName }} </button>
...
</mat-menu>
我建议您在继续操作时阅读 Angular 的指南。
Angular的文字插值:https://angular.io/guide/interpolation
我是 Whosebug 和 Angular 的新手。我正在 Angular 中编写前端应用程序(电子商务)。我将点击事件绑定到垫子菜单的按钮,以便具有以下行为:当我点击按钮时,我想显示已点击类别的产品。例如,如果我单击“彩妆”按钮,我希望显示类别为“彩妆”的所有产品。问题是,当我点击按钮时,浏览器上没有显示任何内容,但我想应用程序的逻辑是有效的,因为如果我打开浏览器的控制台,则会打印出所选类别的产品。
product.component.html:
<mat-menu #menu="matMenu">
<button mat-menu-item (click)="categoryFilter('Make-up')"> Make-up</button>
...
</mat-menu>
product.component.ts:
@Component({
selector: 'app-product',
templateUrl: './product.component.html',
styleUrls: ['./product.component.css'] })
export class ProductComponent implements OnInit {
public products: Product[] = [];
public product!: Product;
constructor(private productService: ProductService) { }
ngOnInit() {
this.getProducts();
}
public getProducts(): void{
this.productService.getProducts().subscribe(
(response: Product[]) => {
this.products= response;
},
(error: HttpErrorResponse) => {
alert(error.message);
}
);
}
public categoryFilter(category: string): void{
this.productService.getProductsByCategory(category).subscribe(
(response: void) => {
console.log(response);
},
(error. HttpErrorResponse)=>{
alert(error.message);
}
)
} }
我认为您错过了将响应绑定到 属性,然后使用那个 属性 在浏览器上显示数据。
我不知道响应类型,出于演示目的,假设它是一个字符串。
首先,您需要像创建 public product!: Product;
一样创建一个 属性,我们称之为 categoryName: string
在点击事件中,您必须将此 属性 与您的响应绑定,因此它应该如下所示:
public categoryFilter(category: string): void{
this.productService.getProductsByCategory(category).subscribe(
(response: string) => {
this.categoryName = response;
console.log(response);
},
(error. HttpErrorResponse)=>{
alert(error.message);
}
)
}
现在您必须将 categoryName
绑定到您的 HTML 中,以便它可以显示。您可以使用 Angular 的文本插值,它使用花括号 {{}} 在 HTML 中显示字符串值。
因此,您的 HTML 将如下所示:
<mat-menu #menu="matMenu">
<button mat-menu-item (click)="categoryFilter('Make-up')"> {{ categoryName }} </button>
...
</mat-menu>
我建议您在继续操作时阅读 Angular 的指南。
Angular的文字插值:https://angular.io/guide/interpolation