Angular 自定义指令中的 HostBinding 在 *ngFor 中不起作用
Angular HostBinding in a custom directive not working inside an *ngFor
我创建了一个自定义指令,用于添加/删除带有点击事件的 class 选择器。应该非常简单,只要我在 ngFor 循环之外使用该指令,它就可以正常工作。
该指令由以下代码组成:
import { Directive, HostBinding, HostListener, Input } from '@angular/core';
@Directive({
selector: '[appFav]'
})
export class FavDirective {
@HostBinding('class.isFav') isFav:boolean = false;
@HostListener('click') onClick() {
this.isFav = !this.isFav;
console.log('clicked');
}
@Input() set appFav(val:boolean) {
this.isFav = val;
}
}
我正在尝试在 Cards 组件内的按钮上使用该指令。
所以在 Cards 组件的 html 模板中,按钮代码如下所示:
<div class="favBtn" appFav><span class="material-icons">favorite_border</span></div>
这在我单独使用组件时有效,但当我使用如下所示的 ngFor 循环生成多张卡片时,装饰器似乎不再有效。
<custom-card class="card" *ngFor="let card of getCards()"></custom-card>
指令中的 isFav 属性 已修复,并且在我检查按钮时未添加 .isFav class 选择器。尽管 console.log 消息显示正确,这意味着指令中的 onClick 方法执行 运行.
如有任何帮助,我们将不胜感激。提前致谢。
现在 angular 无法区分 b/w 组件,如果您看到元素面板,您单击一个按钮,所有实例都会更新。所以要为循环中的所有元素分配一个唯一的键,以便 angular 可以区分它们。
--尝试下面的代码你会得到预期的行为:
在你app.component.html -- 添加一个trackBy函数将分配唯一键
<app-media-item *ngFor="let mi of getMediaItems(); trackBy:trackBytitle"
[mediaItem]='mi'
(interact)='hdlMediaItem($event)'
>
</app-media-item>
还有你 app.component.ts -- 现在标题对我来说似乎很独特所以我 return 标题部分。
trackBytitle(index: number, mediaObj: any): string {
return mediaObj.title; // title is unique or return something unique
}
我创建了一个自定义指令,用于添加/删除带有点击事件的 class 选择器。应该非常简单,只要我在 ngFor 循环之外使用该指令,它就可以正常工作。 该指令由以下代码组成:
import { Directive, HostBinding, HostListener, Input } from '@angular/core';
@Directive({
selector: '[appFav]'
})
export class FavDirective {
@HostBinding('class.isFav') isFav:boolean = false;
@HostListener('click') onClick() {
this.isFav = !this.isFav;
console.log('clicked');
}
@Input() set appFav(val:boolean) {
this.isFav = val;
}
}
我正在尝试在 Cards 组件内的按钮上使用该指令。 所以在 Cards 组件的 html 模板中,按钮代码如下所示:
<div class="favBtn" appFav><span class="material-icons">favorite_border</span></div>
这在我单独使用组件时有效,但当我使用如下所示的 ngFor 循环生成多张卡片时,装饰器似乎不再有效。
<custom-card class="card" *ngFor="let card of getCards()"></custom-card>
指令中的 isFav 属性 已修复,并且在我检查按钮时未添加 .isFav class 选择器。尽管 console.log 消息显示正确,这意味着指令中的 onClick 方法执行 运行.
如有任何帮助,我们将不胜感激。提前致谢。
现在 angular 无法区分 b/w 组件,如果您看到元素面板,您单击一个按钮,所有实例都会更新。所以要为循环中的所有元素分配一个唯一的键,以便 angular 可以区分它们。
--尝试下面的代码你会得到预期的行为:
在你app.component.html -- 添加一个trackBy函数将分配唯一键
<app-media-item *ngFor="let mi of getMediaItems(); trackBy:trackBytitle"
[mediaItem]='mi'
(interact)='hdlMediaItem($event)'
>
</app-media-item>
还有你 app.component.ts -- 现在标题对我来说似乎很独特所以我 return 标题部分。
trackBytitle(index: number, mediaObj: any): string {
return mediaObj.title; // title is unique or return something unique
}