angular - ngOnDestroy 或 DOM 删除上的 CSS 动画

标签 angular typescript css-animations

我正在使用 Angular 7,当从 DOM 中删除某个组件的宿主元素时,我想在该元素上运行一些 CSS 动画 - 组件被销毁。

  • 如果我想在 ngOnDestroy 方法上执行此操作,则宿主元素已从 DOM 中删除。
  • 如果我想使用 MutationObserver 监听父组件中已删除的元素,那么我会遇到同样的问题,该元素已从 DOM 中删除。

我还有哪些其他选择以及执行此操作的最佳方法是什么?我还提到我不想使用 jquery 或其任何插件。

最佳答案

如果您有能力重新思考问题,您可以使用 Angular 动画的 void 状态和 *ngIf 执行类似的操作。

BrowserAnimationsModule 导入到 app.module.ts 中:

import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
@NgModule({
  imports: [ BrowserAnimationsModule ]
})

包含要销毁组件的父组件可以实现 void 状态动画,并使用 *ngIf 将其应用到子组件。例如:

@Component({

  animations: [
    trigger('animateDestroy', [
      state('void', style({ opacity: '0' })),
      transition('* => void', animate('500ms ease'))
    ])
  ],

  template: `
    <component-to-destroy *ngIf="someBoolean" @animateDestroy>
    </component-to-destroy>
  `

})
export class ParentComponent {
  someBoolean = true;
}

如果将 someBoolean 更改为 false,Angular 会因为 *ngIf 而从 DOM 中删除该组件。但在此之前,带有 * => voidanimateDestroy 触发器会告诉 Angular 在从 DOM 中删除元素之前先进行动画处理。

Some reading about Angular Animations and the void state on the docs.

它不是 CSS,但它可以产生与 CSS 提供的相同效果。它允许模板使用 bool 值处理组件的“毁坏或未毁坏”状态,而不是跳过类内的编程循环。

希望这能有所帮助。

关于angular - ngOnDestroy 或 DOM 删除上的 CSS 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56538189/

相关文章:

javascript - 没有 NodeJS 的 Typescript 命令行编译

CSS 动画 : Rotate around X-axis?

angular - 在 Angular 2+ 中为单个组件使用两个 HTML?

angular - ControlValueAccessor 和触摸

Angular:结合应用程序但作为单独的项目开发

给定长度的字符串的 typescript 类型/接口(interface)

angular - 存储库不干净。请在更新 Angular 8 之前提交或存储任何更改

angular - 当有 ngModel 时,检查 Angular 2 中的单选按钮

javascript - 在 CSS3 翻译动画后获取元素的新位置?

html - 媒体查询后不触发CSS动画