为了账号安全,请及时绑定邮箱和手机立即绑定

Angular 7 动画触发器导致控制台错误

Angular 7 动画触发器导致控制台错误

慕斯王 2021-06-22 17:00:49
我正在尝试在组件上设置淡入淡出动画。 我的应用程序模块导入 BrowserAnimationsModule。我在一个单独的文件中创建了一个动画和一个触发器:import { animate, style, animation, trigger, useAnimation, transition } from '@angular/animations';export const fadeIn = animation([style({ opacity: 0 }), animate('500ms', style({ opacity: 1 }))]);export const fadeOut = animation(animate('500ms', style({ opacity: 0 })));export const fadeInOut = trigger('fadeInOut', [  transition('void => *', useAnimation(fadeIn)),  transition('* => void', useAnimation(fadeOut))]);然后,我创建了一个组件并验证了该组件本身是否有效:import { Component, OnInit } from '@angular/core';import { Globals } from '@app/globals';import { fadeInOut } from '@app/animations';@Component({  selector: 'app-global-alert',  template: `    <div class="global-alert" *ngIf="globalAlert">      <div class="global-alert-message"><ng-content></ng-content></div>      <div class="close" (click)="closeGlobalAlert()"></div>    </div>  `,  styles: [],  animations: [fadeInOut]})export class GlobalAlertComponent implements OnInit {  private globalAlert: boolean;  constructor(private globals: Globals) {    this.globalAlert = globals.hasGlobalAlert;  }  ngOnInit() {}  closeGlobalAlert() {    this.globals.hasGlobalAlert = false;    this.globalAlert = false;  }}请注意,我正在存储此警报是否应出现在 globals.ts 文件中的状态,尽管这无关:import { Injectable } from '@angular/core';@Injectable()export class Globals {  hasGlobalAlert = true;}所以我在另一个组件的 html 中使用该组件,如下所示:<div>lots of html</div>   <app-global-alert>Hello world</app-global-alert>这有效,当您单击关闭按钮时,警报将被解除,一切都按预期进行。但是,当我尝试将触发器添加到它时   <app-global-alert [@fadeInOut]>Hello world</app-global-alert>我收到控制台错误 Error: Found the synthetic property @fadeInOut. Please include either "BrowserAnimationsModule" or "NoopAnimationsModule" in your application.我已经在谷歌上搜索了这个,但 AFAICT 我已经涵盖了大多数回复中的所有问题:我已经animations在组件中包含了声明,等等。我错过了什么?
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

正如官方 文档中所述,动画应该添加到组件的元数据属性中。这里有这样的财产GlobalAlertComponent:


@Component({

  animations: [fadeInOut],

  ...

})

export class GlobalAlertComponent implements OnInit {

...

这允许在html此组件的一部分内的任何元素上使用动画。但是@fadeInOut动画已经在另一个组件中使用了html:


<div>

  lots of html

</div>

  <app-global-alert [@fadeInOut]>Hello world</app-global-alert>

确保此组件在其元数据中具有导入和动画属性。


查看完整回答
反对 回复 2021-06-24
?
FFIVE

TA贡献1797条经验 获得超6个赞

我收到控制台错误错误: Found the synthetic property @fadeInOut. Please include either "BrowserAnimationsModule" or "NoopAnimationsModule" in your application.


当您没有"BrowserAnimationsModule" or "NoopAnimationsModule"在包含 Module 的组件中导入模块时会发生此错误。如果您的动画组件在 App 模块中,请检查 app.module 在 @NgModule 中是否具有以下内容 -


@NgModule({  

  imports: [

    BrowserModule,

    BrowserAnimationsModule //or NoopAnimationsModule

  ],

  providers: [],

  bootstrap: [AppComponent]

})

export class AppModule { }


查看完整回答
反对 回复 2021-06-24
  • 3 回答
  • 0 关注
  • 278 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信