我需要2种颜色OnClick
之间的过渡。现在,这是我的代码:
- typescript **
animations: [
trigger('menubarState', [
state('false', style({backgroundColor:'#43a047'})),
state('true', style({backgroundColor:'#333'})),
transition('false => true', animate('1s')),
transition('true => false', animate('1s'))
])
]
...
export class MenubarComponent {
menuActive: boolean = false;
onMenuClick () {
if (this.menuActive == false) {
this.menuActive = true;
} else {
this.menuActive = false;
}
}
}
- 超文本标记语言**
<li [@menubarState]="menuActive" (click)="onMenuClick()">
<a><span class="material-icons icon">apps</span></a>
</li>
这确实改变了background-color
,但是,这种改变是即时的,而不是过渡。
我用的是Chrome浏览器,最新版本.
8条答案
按热度按时间ct2axkht1#
这个问题困扰了我很长时间,解决它的方法是将状态变量从布尔类型改为字符串类型。因此,不要跟踪
true
和false
,而是跟踪'true'
和'false'
。动画状态是在应用程序代码中定义的字符串值。
将MenubarComponent类更改为:
我认为这很愚蠢。布尔值显然是二元状态的好选择。
更多信息:www.example.comhttps://angular.io/guide/animations#states-and-transitions
hts6caw32#
扩展AaronKrauss提供的答案。它在对真/假值的直接解释方面存在问题;然而,如果你不想引用字符串上下文,你可以用数字1(真)和0(假)替换上面的真和假,这证明可以解决我的问题,并且不需要任何烦人的字符串解释。
1qczuiv03#
进一步扩展Aaron Krauss的回答:我不想把布尔值转换成字符串,所以我定义了一个getter:
然后在动画定义中(我合并了过渡,因为它们是相同的):
完整的模板:
fgw7neuy4#
确保您在
app.module.ts
文件中导入BrowserAnimationsModule
。5vf7fwbs5#
我用动画,而路由/点击Angular 2。它的作品onclick也。使用此代码的所有类型的路由,您可以使用单独的动画单独的路线变化或onclick。
您也可以根据自己的选择修改上面的代码。
gwo2fgha6#
我不知道我的回答是否解决了这个问题,但我会说,如果你使用离子/Angular ****触发/转换不工作,但只有触发/状态。
如果使用离子/Angular ,则应使用离子动画. https://ionicframework.com/docs/utilities/animations
4xy9mtcn7#
我不明白为什么这个设置返回给我一个白色页。如果我删除transition(),它会工作得很好
camsedfj8#
你不会用CSS吗?
例如: