使用Angular 2.0路由器的页面过渡动画

时间:2016-02-26 11:49:20

标签: javascript angularjs angular angular2-routing

在Angular 2中,我试图通过Router onActivate方法在新组件中设置动画。

我已经设置了一个Plunk,并在此处演示了该问题: http://plnkr.co/FikHIEPONMYhr6COD9Ou

其中一个页面组件中的onActivate方法示例:

routerOnActivate(next: ComponentInstruction, prev: ComponentInstruction) {
    document.getElementsByTagName("page3")[0].className='animateinfromright';
}

我遇到的问题是我希望新组件在现有组件的顶部上进行动画处理,但在新组件出现之前,旧组件将从DOM中删除加入。

是否有办法延迟删除上一页,而新的页面会动画?

我发现了类似的问题:Page transition animations with Angular 2.0 router and component interface promises 但该技术只是在添加新组件之前延迟删除前一个组件

最终我会根据我们移动到哪个页面来制作不同的动画,因此在每个页面组件中都有onActivate。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

你可以添加一个&#34; EchoComponent&#34;在<router-outlet>所在的位置,在<canvas>中创建drawImage(),在routerOnDeactivate()上创建@Component({ template: `<canvas #canvas *ngIf="visible"></canvas>` }) class EchoComponent { @ViewChild("canvas") canvas; public visible = false; constructor(private _shared: SharedEmitterService) { this._shared.subscribe(el => el ? this.show(el) : this.hide(el)); } show(el) { this.canvas.drawImage(el); this.visible = true; } hide() { this.visible = false; } } @Component({...}) class PrevRoute { constructor(private _eref: ElementRef, private _shared: SharedEmitterService) {} routerOnDeactivate { this._shared.emit(this._eref.nativeElement); } } @Component({...}) class NextRoute { constructor(private _eref: ElementRef, private _shared: SharedEmitterService) {} routerOnActivate { this._shared.emit(false); } } ...类似于:

ConnectivityManager

这只是一个伪代码(从内存中编写),但它应该说明这种方法需要什么。