javascript - Angular ngClass/ngIf 不重新呈现更改
问题描述
我正在开发一个 Angular 项目,我需要根据一个变量来设置一个或另一个类(并且它们必须实时更改,无需刷新)。
我尝试使用 *ngIf/else 和 [ngClass] 并且它们确实有效,但它们不会重新渲染。它们仅在我刷新网站时起作用
使用 *ngIf/else:
<i
*ngIf="favSongs.includes(track.id); else plus"
(click)="setToFav(track.id)"
class="fa fa-check"
></i>
<ng-template #plus>
<i (click)="setToFav(track.id)" class="fa fa-plus"></i>
</ng-template>
使用 [ngClass]:
<i
(click)="setToFav(track.id)"
[ngClass]="{'fa fa-check': favSongs.includes(track.id),
'fa fa-plus': !favSongs.includes(track.id)}"
></i>
如前所述,它确实有效,但仅在您刷新时才有效。我正在寻找类似 React 的东西,当您更新类时,组件会重新呈现。
解决方案
更改检测仅在绑定的值发生更改时触发。基元的值是它们的值,而对象的值是它们的引用值。
将轨道添加到轨道数组将改变绑定对象,但不会更改其引用,也不会触发更改检测。
这是使用不可变对象的原因之一。
在setToFav
你可以这样做faveSongs = faveSongs.push(track.id).slice();
左右。
推荐阅读
- windows - MDT 1709 - 新建服务器 - OSDComputerName 被覆盖
- c# - 使用带有 Active Directory ADFS 的 WPF 客户端对 Cloud NodeJS 后端进行身份验证
- sonos - Sonos 播放器在评分项目后未调用 getExtendedMetadata
- asp.net-mvc - 根据长度格式化 TimeSpan 的最佳方法 [ASP.NET Core MVC]
- javascript - 将 md-fab-toolbar 与 ng-repeat 一起使用
- c# - 我的子弹随机产生并且没有伤害
- python - 为什么networkx每次运行都会重绘我的图表?
- c - 孩子之间的管道
- cassandra - 快速失败 Cassandra NTR 阻止的任务
- linux - Docker Xdebug LAN / 公共开发服务器