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

时间:2019-06-08 17:55:56

标签: javascript angular animation angular-animations

我正在尝试在组件上设置fadeInOut动画。 我的应用模块导入了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.

我已经对此进行了Google搜索,但AFAICT在大多数答复中都涵盖了所有陷阱:我在组件中包括了animations声明,等等。

我想念什么?

3 个答案:

答案 0 :(得分:0)

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

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

中包含以下内容
@NgModule({  
  imports: [
    BrowserModule,
    BrowserAnimationsModule //or NoopAnimationsModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

答案 1 :(得分:0)

如官方docs中所述,应将动画添加到组件的元数据属性。 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>

确保此组件的元数据中具有import和animation属性。

答案 2 :(得分:-1)

您需要添加BrowserAnimationsModule 在导入部分的app-module.ts文件中。

import: [
BrowserAnimationsModule
]

希望它会有所帮助。 编码愉快:)