ngClass 不工作 Angular 5
ngClass doesn't work Angular 5
您好,我是用户 angular 5,我想为我的 soundcloud 播放器切换播放 <-> 暂停图标。
这是我的 TypeScript,然后是我的 html。
我可以在我的控制台中看到我正确地切换了播放模式,但超赞字体图标并没有像预期的那样改变。
感谢您的帮助。
import { Ng2DeviceService } from 'ng2-device-detector';
import { Component, OnInit } from '@angular/core';
import { NgClass } from '@angular/common';
import './soundcloud-script.js';
@Component({
selector: 'app-sc-player',
templateUrl: './sc-player.component.html',
styleUrls: ['./sc-player.component.css']
})
export class ScPlayerComponent{
playMode: boolean;
constructor(private deviceService: Ng2DeviceService)
{
this.playMode = true;
}
toggleIcon(){
this.playMode = !this.playMode;
console.log(this.playMode);
}
}
<span id="play"
(click)="toggleIcon()">
<i [ngClass]="{'fas fa-pause positionPlay': !playMode, 'fas fa-play positionPlay': playMode}"></i>
</span>
在class中取出普通表达式,在ngClass
指令中放入条件表达式
<i class="fa positionPlay"
[ngClass]="{'fa-pause': !playMode, 'fa-play': playMode}"
></i>
在此处 Deep explanation 查看 ngClass 的工作原理?以及为什么要去掉常见的 classes。
另外 fas
应该是 fa
class,如果你使用 font-awesome
图标 class。
将普通 class 放在 ngClass
之外。查看以下演示的工作 plnkr
<span id="play" (click)="toggleIcon()">
<i class="fa positionPlay" [ngClass]="{'fa-pause': !playMode, 'fa-play': playMode}"></i>
</span>
感谢 Santosh Singh 和 Pankaj Parkar 的帮助!您的回答帮助我找到了最终答案。
在这里。
我在 index.html 中更改了这一行:
<script defer src="https://use.fontawesome.com/releases/v5.0.1/js/all.js"></script>
根据 Santosh Singh 的 Plunker 中提出的行:
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
当然,我将 class "fas" 更改为 "fa" 以使其与 font-awesome 4.7.0 版本一起正常工作。正如帕卡所说:
<i class="fa positionPlay"
[ngClass]="{'fa-pause': !playMode, 'fa-play': playMode}"
></i>
也许我一开始没有从 font-awesome 导入正确的 v5 参考。 Nvm,现在可以正常使用了。
谢谢大家!
我刚刚 运行 在使用 angular5 中的 fontawesome5 时遇到了同样的问题。
问题是,每当 fontawesome 编译器找到带有 class="fa... something" 的标签时,它就会用 svg...something 标签替换它,因此您无法再引用初始标签并更改其 class.
我找到了一个非常糟糕但有效的问题解决方案。
因此,由于您无法更改初始元素的 class 我只是从零开始重新创建元素并从 dom 中删除前一个使用 ngFor 指令的元素,如下所示:
export class FavoriteComponent implements OnInit {
isFavorite: boolean;
classes: string[]
constructor() { }
ngOnInit() {
this.isFavorite = false;
this.classes = ['far fa-star'];
}
onClick(){
this.isFavorite = !this.isFavorite;
this.classes = this.isFavorite ? ['fas fa-star'] : ['far fa-star'];
}
}
<div (click)="onClick()" *ngFor="let class of classes">
<i class={{class}}></i>
</div>
我不到一个月前就开始开发,所以代码不是最干净的,但我认为它适合你。
抱歉,信誉不足,无法回复显示您的解决方案的更新答案。对于它的价值,你可以吃蛋糕也可以吃。您不需要从 FA5 降级到 FA4.7。如果将用 link 替换为 4.7 css 的脚本标记替换为以下内容,它具有相同的效果但允许您访问 FA5 图标:
<link href="//use.fontawesome.com/releases/v5.0.1/css/all.css" rel="stylesheet">
您好,我是用户 angular 5,我想为我的 soundcloud 播放器切换播放 <-> 暂停图标。
这是我的 TypeScript,然后是我的 html。
我可以在我的控制台中看到我正确地切换了播放模式,但超赞字体图标并没有像预期的那样改变。
感谢您的帮助。
import { Ng2DeviceService } from 'ng2-device-detector';
import { Component, OnInit } from '@angular/core';
import { NgClass } from '@angular/common';
import './soundcloud-script.js';
@Component({
selector: 'app-sc-player',
templateUrl: './sc-player.component.html',
styleUrls: ['./sc-player.component.css']
})
export class ScPlayerComponent{
playMode: boolean;
constructor(private deviceService: Ng2DeviceService)
{
this.playMode = true;
}
toggleIcon(){
this.playMode = !this.playMode;
console.log(this.playMode);
}
}
<span id="play"
(click)="toggleIcon()">
<i [ngClass]="{'fas fa-pause positionPlay': !playMode, 'fas fa-play positionPlay': playMode}"></i>
</span>
在class中取出普通表达式,在ngClass
指令中放入条件表达式
<i class="fa positionPlay"
[ngClass]="{'fa-pause': !playMode, 'fa-play': playMode}"
></i>
在此处 Deep explanation 查看 ngClass 的工作原理?以及为什么要去掉常见的 classes。
另外 fas
应该是 fa
class,如果你使用 font-awesome
图标 class。
将普通 class 放在 ngClass
之外。查看以下演示的工作 plnkr
<span id="play" (click)="toggleIcon()">
<i class="fa positionPlay" [ngClass]="{'fa-pause': !playMode, 'fa-play': playMode}"></i>
</span>
感谢 Santosh Singh 和 Pankaj Parkar 的帮助!您的回答帮助我找到了最终答案。
在这里。
我在 index.html 中更改了这一行:
<script defer src="https://use.fontawesome.com/releases/v5.0.1/js/all.js"></script>
根据 Santosh Singh 的 Plunker 中提出的行:
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
当然,我将 class "fas" 更改为 "fa" 以使其与 font-awesome 4.7.0 版本一起正常工作。正如帕卡所说:
<i class="fa positionPlay"
[ngClass]="{'fa-pause': !playMode, 'fa-play': playMode}"
></i>
也许我一开始没有从 font-awesome 导入正确的 v5 参考。 Nvm,现在可以正常使用了。
谢谢大家!
我刚刚 运行 在使用 angular5 中的 fontawesome5 时遇到了同样的问题。 问题是,每当 fontawesome 编译器找到带有 class="fa... something" 的标签时,它就会用 svg...something 标签替换它,因此您无法再引用初始标签并更改其 class.
我找到了一个非常糟糕但有效的问题解决方案。 因此,由于您无法更改初始元素的 class 我只是从零开始重新创建元素并从 dom 中删除前一个使用 ngFor 指令的元素,如下所示:
export class FavoriteComponent implements OnInit {
isFavorite: boolean;
classes: string[]
constructor() { }
ngOnInit() {
this.isFavorite = false;
this.classes = ['far fa-star'];
}
onClick(){
this.isFavorite = !this.isFavorite;
this.classes = this.isFavorite ? ['fas fa-star'] : ['far fa-star'];
}
}
<div (click)="onClick()" *ngFor="let class of classes">
<i class={{class}}></i>
</div>
我不到一个月前就开始开发,所以代码不是最干净的,但我认为它适合你。
抱歉,信誉不足,无法回复显示您的解决方案的更新答案。对于它的价值,你可以吃蛋糕也可以吃。您不需要从 FA5 降级到 FA4.7。如果将用 link 替换为 4.7 css 的脚本标记替换为以下内容,它具有相同的效果但允许您访问 FA5 图标:
<link href="//use.fontawesome.com/releases/v5.0.1/css/all.css" rel="stylesheet">