ngFor 正在触发 mouseenter 子更改
ngFor is triggering mouseenter on child change
每次子元素发生变化时,NgFor 都会在父元素上触发 mouseenter。我想禁用此行为,但我不知道如何。我在 stackblitz here.
中创建了一个简单示例
组件:
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
visible;
mouseenterCalled = 0;
intervalCalled = 0;
items$ = interval(2000).pipe(
map(() => {
this.intervalCalled++;
return [`item${this.intervalCalled}`, 'item2', 'item3'];
})
);
onEnter() {
this.mouseenterCalled++;
this.visible = true;
}
}
和模板:
<div (mouseenter)="onEnter()">Hover me | mouseenter was called: {{mouseenterCalled}}x | | interval was called:
{{intervalCalled}}x</div>
<div *ngIf="visible" (mouseenter)="onEnter()">
<div>Overlay header</div>
<div *ngIf="items$ | async as items">
<p *ngFor="let item of items">{{ item }}</p>
</div>
</div>
如果将鼠标悬停在 Hover me
文本上,将出现“叠加层”。由于item是通过interval生成的,所以出现的时间会晚一些,不过这样也可以。一旦他们在那里,将鼠标悬停在第一个项目上。 mouseenter 计数将在每次项目更改时增加,但侦听器本身位于父项 div 上,而不是项目上。我试过使用 stopPropagation,但它无济于事。事件仍然被触发。知道我该如何解决这个问题吗?
尝试将 trackBy 函数添加到 ngFor
component.html
<div (mouseenter)="onEnter()">Hover me | mouseenter was called: {{mouseenterCalled}}x | | interval was called:
{{intervalCalled}}x</div>
<div *ngIf="visible" (mouseenter)="onEnter()">
<div>Overlay header</div>
<div *ngIf="items$ | async as items">
<p *ngFor="let item of items;trackBy: trackBy">{{ item }}</p>
</div>
</div>
component.ts
trackBy = (item,index)=>{
return item;
}
每次子元素发生变化时,NgFor 都会在父元素上触发 mouseenter。我想禁用此行为,但我不知道如何。我在 stackblitz here.
中创建了一个简单示例组件:
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
visible;
mouseenterCalled = 0;
intervalCalled = 0;
items$ = interval(2000).pipe(
map(() => {
this.intervalCalled++;
return [`item${this.intervalCalled}`, 'item2', 'item3'];
})
);
onEnter() {
this.mouseenterCalled++;
this.visible = true;
}
}
和模板:
<div (mouseenter)="onEnter()">Hover me | mouseenter was called: {{mouseenterCalled}}x | | interval was called:
{{intervalCalled}}x</div>
<div *ngIf="visible" (mouseenter)="onEnter()">
<div>Overlay header</div>
<div *ngIf="items$ | async as items">
<p *ngFor="let item of items">{{ item }}</p>
</div>
</div>
如果将鼠标悬停在 Hover me
文本上,将出现“叠加层”。由于item是通过interval生成的,所以出现的时间会晚一些,不过这样也可以。一旦他们在那里,将鼠标悬停在第一个项目上。 mouseenter 计数将在每次项目更改时增加,但侦听器本身位于父项 div 上,而不是项目上。我试过使用 stopPropagation,但它无济于事。事件仍然被触发。知道我该如何解决这个问题吗?
尝试将 trackBy 函数添加到 ngFor
component.html
<div (mouseenter)="onEnter()">Hover me | mouseenter was called: {{mouseenterCalled}}x | | interval was called:
{{intervalCalled}}x</div>
<div *ngIf="visible" (mouseenter)="onEnter()">
<div>Overlay header</div>
<div *ngIf="items$ | async as items">
<p *ngFor="let item of items;trackBy: trackBy">{{ item }}</p>
</div>
</div>
component.ts
trackBy = (item,index)=>{
return item;
}