Angular2使用组件外部的动画

时间:2017-04-25 13:46:37

标签: angular animation typescript

我已经快速创建了一个简单的组件

@Component({
  selector: 'saved-overlay',
  templateUrl: './saved-overlay.html',
  exportAs: 'saved-overlay',
  animations: [
    trigger('inOut', [
      transition('void => *', [
        animate("300ms ease-out", keyframes([
          style({opacity: 0}),
          style({opacity: 1})
        ]))
      ]),
      transition('* => void', [
        animate("300ms ease-out", keyframes([
          style({opacity: 1}),
          style({opacity: 0})
        ]))
      ])
    ])
  ]
})
export class SavedOverlayComponent {
}

我以这种方式在我的模板中调用它:

<saved-overlay #myOverlay='saved-overlay'></saved-overlay>

无论如何都要从我的组件外部调用inOut动画(即在我引用此组件的模板中)。 我理想的是在我的组件本身上使用这个动画:

<saved-overlay #myOverlay='saved-overlay' [@inOut]></saved-overlay>

但是,它确实会触发错误,说明我的inOut动画未定义。

1 个答案:

答案 0 :(得分:1)

您可以使用@HostBinding:

@Component({
  selector: 'saved-overlay',
  templateUrl: './saved-overlay.html',
  exportAs: 'saved-overlay',
  animations: [
    trigger('inOut', [
      transition('void => *', [
        animate("300ms ease-out", keyframes([
          style({opacity: 0}),
          style({opacity: 1})
        ]))
      ]),
      transition('* => void', [
        animate("300ms ease-out", keyframes([
          style({opacity: 1}),
          style({opacity: 0})
        ]))
      ])
    ])
  ]
})
export class SavedOverlayComponent {
  @HostBinding("@InOut")
  foo:any;
}

然后无需绑定到任何内容或在模板中指定它:

<saved-overlay #myOverlay='saved-overlay'></saved-overlay>

请注意,我使用随机属性,因为我们实际上并不关心它,因为您使用特殊状态(*void),因此您无需在内部存储任何内容这个属性,并根据您的喜好命名...