在 angular 11 中,如何使插入符号有条件地旋转?
In angular 11, how can you make a caret rotate conditionally?
我已经尝试了所有可以想象的方法。当 showNavDropdownDashboard 为 true 或 false 时,我需要插入符号旋转,目前无关紧要。我唯一一次让插入符旋转是在我设置 transform="rotate-180-deg" 时,其他都不起作用...
设置 rotate="90" 失败,因为“TS2322:类型‘90’无法分配给类型‘90 | 180 | 270 | undefined’。”
使用 ngClass 失败,我从来没有看到 class 分配...我尝试了我能找到的所有等效格式,它变得荒谬了。
<div type="button" (click)="collapse.toggle()">
<fa-icon [icon]="caret"></fa-icon>
</div>
<div #collapse="ngbCollapse" [(ngbCollapse)]="!showNavTop">
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
<button class="navbar-toggler" type="button" (click)="showNavDropdownDashboard = !showNavDropdownDashboard">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse" [class.collapse]="!showNavDropdownDashboard">
<ul ngbNav class="navbar-nav">
<li ngbDropdown>
<div ngbNavLink ngbDropdownToggle>
linkies
</div>
<div ngbDropdownMenu class="dropdown-menu-dark">
<button ngbDropdownItem>- 1 Demo</button>
<button ngbDropdownItem>- 2 Demo</button>
<button ngbDropdownItem>+ New Dashboard</button>
</div>
</li>
</ul>
</div>
</nav>
</div>
class
import { Component, OnInit } from '@angular/core';
import { faCaretUp } from '@fortawesome/free-solid-svg-icons';
@Component({
selector: 'app-nav-top',
templateUrl: './nav-top.component.html',
styleUrls: ['./nav-top.component.css']
})
export class NavTopComponent implements OnInit {
caret = faCaretUp;
constructor() { }
public showNavDropdownDashboard = false;
public showNavTop = false;
ngOnInit(): void {
}
}
css
.transform-turn-0 {
transform:rotate(-0deg);
transition:all 0.3s ease-in-out; /*for smoothness*/
}
.transform-turn-180 {
transform:rotate(-180deg);
transition:all 0.3s ease-in-out; /*for smoothness*/
}
angular版本
Angular CLI: 11.2.5
Node: 15.11.0
OS: win32 x64
Angular: 11.2.6
... animations, common, compiler, compiler-cli, core, forms
... localize, platform-browser, platform-browser-dynamic, router
Ivy Workspace: Yes
Package Version
---------------------------------------------------------
@angular-devkit/architect 0.1102.5
@angular-devkit/build-angular 0.1102.5
@angular-devkit/core 11.2.5
@angular-devkit/schematics 11.2.5
@angular/cli 11.2.5
@schematics/angular 11.2.5
@schematics/update 0.1102.5
rxjs 6.6.6
typescript 4.1.5
试试这个:
<fa-icon [icon]="caret" [rotate]="90"></fa-icon>
这种方法解决了我的问题。
不幸的是,我仍然是 TypeScript 和 Angular 的初学者,所以我无法自信地解释为什么它有效。我遇到了同样的问题,我遇到了你的 post 寻找答案。也许更有见识的 TypeScript/Angular 开发人员可以解释一下。
我怀疑是这样的:
rotate="90"
被视为正常的 属性 赋值,因此值“90”是一个字符串。 TypeScript 期望旋转为数字(90 或 180 或 270 或未定义)
[rotate]="90"
"" 中的值被视为 TypeScript 代码。值“90”被视为数字,TypeScript 很高兴一切都有效。
至于您的第二个要求,即仅在 showNavDropdownDashboard === true
时发生轮换,您可以在 属性 作业中利用 TypeScript 执行,例如
<fa-icon [icon]="caret" [rotate]="showNavDropdownDashboard === true ? 90 : undefined"></fa-icon>
我已经尝试了所有可以想象的方法。当 showNavDropdownDashboard 为 true 或 false 时,我需要插入符号旋转,目前无关紧要。我唯一一次让插入符旋转是在我设置 transform="rotate-180-deg" 时,其他都不起作用...
设置 rotate="90" 失败,因为“TS2322:类型‘90’无法分配给类型‘90 | 180 | 270 | undefined’。”
使用 ngClass 失败,我从来没有看到 class 分配...我尝试了我能找到的所有等效格式,它变得荒谬了。
<div type="button" (click)="collapse.toggle()">
<fa-icon [icon]="caret"></fa-icon>
</div>
<div #collapse="ngbCollapse" [(ngbCollapse)]="!showNavTop">
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
<button class="navbar-toggler" type="button" (click)="showNavDropdownDashboard = !showNavDropdownDashboard">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse" [class.collapse]="!showNavDropdownDashboard">
<ul ngbNav class="navbar-nav">
<li ngbDropdown>
<div ngbNavLink ngbDropdownToggle>
linkies
</div>
<div ngbDropdownMenu class="dropdown-menu-dark">
<button ngbDropdownItem>- 1 Demo</button>
<button ngbDropdownItem>- 2 Demo</button>
<button ngbDropdownItem>+ New Dashboard</button>
</div>
</li>
</ul>
</div>
</nav>
</div>
class
import { Component, OnInit } from '@angular/core';
import { faCaretUp } from '@fortawesome/free-solid-svg-icons';
@Component({
selector: 'app-nav-top',
templateUrl: './nav-top.component.html',
styleUrls: ['./nav-top.component.css']
})
export class NavTopComponent implements OnInit {
caret = faCaretUp;
constructor() { }
public showNavDropdownDashboard = false;
public showNavTop = false;
ngOnInit(): void {
}
}
css
.transform-turn-0 {
transform:rotate(-0deg);
transition:all 0.3s ease-in-out; /*for smoothness*/
}
.transform-turn-180 {
transform:rotate(-180deg);
transition:all 0.3s ease-in-out; /*for smoothness*/
}
angular版本
Angular CLI: 11.2.5
Node: 15.11.0
OS: win32 x64
Angular: 11.2.6
... animations, common, compiler, compiler-cli, core, forms
... localize, platform-browser, platform-browser-dynamic, router
Ivy Workspace: Yes
Package Version
---------------------------------------------------------
@angular-devkit/architect 0.1102.5
@angular-devkit/build-angular 0.1102.5
@angular-devkit/core 11.2.5
@angular-devkit/schematics 11.2.5
@angular/cli 11.2.5
@schematics/angular 11.2.5
@schematics/update 0.1102.5
rxjs 6.6.6
typescript 4.1.5
试试这个:
<fa-icon [icon]="caret" [rotate]="90"></fa-icon>
这种方法解决了我的问题。
不幸的是,我仍然是 TypeScript 和 Angular 的初学者,所以我无法自信地解释为什么它有效。我遇到了同样的问题,我遇到了你的 post 寻找答案。也许更有见识的 TypeScript/Angular 开发人员可以解释一下。
我怀疑是这样的:
rotate="90"
被视为正常的 属性 赋值,因此值“90”是一个字符串。 TypeScript 期望旋转为数字(90 或 180 或 270 或未定义)
[rotate]="90"
"" 中的值被视为 TypeScript 代码。值“90”被视为数字,TypeScript 很高兴一切都有效。
至于您的第二个要求,即仅在 showNavDropdownDashboard === true
时发生轮换,您可以在 属性 作业中利用 TypeScript 执行,例如
<fa-icon [icon]="caret" [rotate]="showNavDropdownDashboard === true ? 90 : undefined"></fa-icon>