Angular动画:未触发 :leave

4

我有一个带有动画效果的提示组件,其中 :enter 动画效果正常工作,但是 :leave 动画效果从未触发。

这里是一个指向 Stackblitz 的链接: https://stackblitz.com/edit/building-tooltip-eoby9e?file=src/app/tooltip/tooltip.component.ts

  animations: [
    trigger('tooltip', [
      transition(':enter', [
        style({ opacity: 0 }),
        animate(300, style({ opacity: 1 })),
      ]),
      transition(':leave', [
        animate(300, style({ opacity: 0 })),
      ]),
    ]),
  ],

另一个使用 @HostBinding 的示例:

@Component({
  selector: 'app-dialog',
  template: '<ng-container cdkPortalOutlet></ng-container>',
  changeDetection: ChangeDetectionStrategy.OnPush,
  animations: [
    trigger('dialog', [
      transition(':enter', [
        style({
          opacity: 0,
          transform: 'translateY(-100%)'
        }),
        animate('400ms ease-out',
          style({
            opacity: 1,
            transform: 'translateY(0)'
          }))
      ]),
      transition(':leave', [
        animate('400ms ease-out',
          style({
            opacity: 0,
            transform: 'translateY(-100%)'
          }))
      ])
    ])
  ]
})
export class DialogComponent extends BasePortalOutlet implements OnDestroy, OnInit {

  @ViewChild(CdkPortalOutlet) portalOutlet: CdkPortalOutlet;
  @HostBinding('@dialog') dialog = true;
1个回答

3

确实有效。但我有另一个情况,其中我有一个扩展了BasePortalOutlet的@HostBinding,动画在那里不起作用。问题已更新。 - vlio20
请问您能否更新 StackBlitz 以重现此问题? - Andrei
我看到了链接中的旧例子。 - Andrei
尝试点击按钮。 - vlio20
这是一个非常流畅的方式来实现它。 - Rip3rs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接