1、为什么有的人路由转动效离场动效不生效?

自己研究发现是加动效的位置放错了  如下:

<---! animate-state.component.html -->
<div style="background-color: antiquewhite;width: 100vw" [@trigger] id="f">
style="background-color: antiquewhite;width: 100%;height: 100px;
</div>
//有的人可能会在组件内容的最顶层元素 加一个动效。以为这样能达到路由转场的效果,其实不然,因为组件本身才是这个组件的根元素。当通过路由转场时,
//离场的根元素瞬间就隐藏了,以有其组件里面的内容不管加什么动效也无用,有动效,元素隐藏了也看不到啊!
// 如上面的的html 模块名为:selector: 'app-animate-state',那么<app-animate-state></app-animate-state>是根元素,动画应该加在这样面才会有转场效果,而不是上面的组件内容最顶层元素

2、解决放法

  因为路由你是没法写代表一个路由内容<app-animate-state></app-animate-state>这个标签元素的。

那么怎么做了?如下

用 @HostBinding()绑定根元素,加上动效。

/路由切换动效如下

//animate-state.component.html
<div style="background-color: antiquewhite;width: 100vw">
style="background-color: antiquewhite;width: 100%;height: 100px;
</div> //animate-state.component.ts import {Component, HostBinding, OnInit} from '@angular/core';
import {trigger2} from "../animation/trigger"; @Component({
selector: 'app-animate-state',
templateUrl: './animate-state.component.html',
styleUrls: ['./animate-state.component.css'],
animations: [trigger2]
})
export class AnimateStateComponent implements OnInit { constructor() { }
@HostBinding('@trigger2') trigger2 = "";
ngOnInit() {
} } //animate-trigger.component.html
<div style="background-color: red;width: 100vw">
[@heroState] = 'name'
</div> //animate-trigger.component.ts import {Component, HostBinding, OnInit} from '@angular/core';
import {trigger1, trigger2} from "../animation/trigger"; @Component({
selector: 'app-animate-trigger',
templateUrl: './animate-trigger.component.html',
styleUrls: ['./animate-trigger.component.css'],
animations: [trigger1, trigger2]
})
export class AnimateTriggerComponent implements OnInit {
constructor() { }
@HostBinding('@trigger2') trigger2 = "";
ngOnInit() {
} }
//app.module.ts
const appRoutes: Routes = [
{ path: 'trigger', component: AnimateTriggerComponent },
{ path: 'state', component: AnimateStateComponent },
{ path: '',
redirectTo: '/trigger',
pathMatch: 'full'
},
{ path: '**', component: AnimateTriggerComponent }
];
//app.component.html <a routerLink="/trigger" routerLinkActive="active">trigger</a>
<a routerLink="/state" routerLinkActive="active">state</a> <div id="app">
<router-outlet></router-outlet>
</div> //trigger.ts 动效 export const trigger2 = trigger('trigger2', [
transition('* => void', [style({opacity: ,position: 'absolute'}),animate(,style({opacity: }))]),
transition('void => *', [style({opacity: ,position: 'absolute'}),animate(,style({opacity: }))])
]);

3、可是这样做的话,每个路由都要这样加,会显的很繁琐,在重复,有办法一次性全加上吗? 当然是有  如下: 用到动效里的query特性函数和路由中的NavigationEnd属性 代码如下

//animate-state.component.html
<div style="background-color: antiquewhite;width: 100vw">
style="background-color: antiquewhite;width: 100%;height: 100px;
</div> //animate-state.component.ts import {Component, HostBinding, OnInit} from '@angular/core'; @Component({
selector: 'app-animate-state',
templateUrl: './animate-state.component.html',
styleUrls: ['./animate-state.component.css'],
})
export class AnimateStateComponent implements OnInit { constructor() { }
ngOnInit() {
} } //animate-trigger.component.html
<div style="background-color: red;width: 100vw">
[@heroState] = 'name'
</div> //animate-trigger.component.ts import {Component, HostBinding, OnInit} from '@angular/core'; @Component({
selector: 'app-animate-trigger',
templateUrl: './animate-trigger.component.html',
styleUrls: ['./animate-trigger.component.css'],
})
export class AnimateTriggerComponent implements OnInit {
constructor() { }
ngOnInit() {
} }
//trigger.ts
import {
trigger,
state,
style,
animate,
transition, query, group
} from '@angular/animations';
import {AnimationEntryMetadata} from "@angular/core";
 export const routeAnimation1: AnimationEntryMetadata = trigger('routeAnimation1', [ transition('* => *', group([ query(':leave', animate('.5s', 
style({opacity: ,position: 'absolute'})), { optional: true }), query(':enter', [style({opacity: ,position: 'absolute'}),
animate('.5s', style({ opacity: }))],{ optional: true }) ]) ) ]); //app.module.ts
const appRoutes: Routes = [ { path: 'trigger', component: AnimateTriggerComponent },
{ path: 'state', component: AnimateStateComponent }, { path: '', redirectTo: '/trigger', pathMatch: 'full' } ]; //app.component.html <a routerLink="/trigger" routerLinkActive="active">trigger</a>
<a routerLink="/state" routerLinkActive="active">state</a>
<div id="app" [@routeAnimation1]="routerStateCode">
  <router-outlet>
  </router-outlet>
</div> //app.component.ts
import { Component } from '@angular/core'; import {NavigationEnd, Router} from "@angular/router";
import { routeAnimation1} from "./animation/trigger";
@Component({ selector: 'app-root', templateUrl:
'./app.component.html', styleUrls: ['./app.component.css'],
animations: [routeAnimation1] })
export class AppComponent {
routerState:boolean = true;
routerStateCode:string = 'active';
constructor(private router:Router)
{ this.router.events.subscribe(event => {
if (event instanceof NavigationEnd) { // 每次路由跳转改变状态
console.log(NavigationEnd,event) this.routerState = !this.routerState;
this.routerStateCode = this.routerState ? 'active' : 'inactive'; } }); } }

有问题,欢迎留言。。。

angular2中的路由转场动效的更多相关文章

  1. Vue-admin工作整理(七):路由的切换动效

    思路就是通过 transition-group 这个组件来对多组件进行控制,效果是通过样式来写,transition-group要有指定的key值,样式中通过name来命名类的名字 <templ ...

  2. angular2-4 之动效-animation

    提示:   angular2 时animation代码在核心模块里面(@angular/core里面);到了angular4.0时animation从核心模块中提取出来作为一个单独的模块, 这样可以在 ...

  3. 动效解析工厂:Mask 动画

    转载自:http://www.cocoachina.com/ios/20160214/15250.html 前言:很多动效都是多种动画的组合,有时候你可能只是需要其中某个动画,但面对庞杂的代码库或是教 ...

  4. 百度MUX:APP动效之美需内外兼修

    移动互联网时代已经到来.APP已如天空的繁星.数也数不清.随着手机硬件的不断升级,实现炫酷且流畅的动效不再是遥远的梦想.假设你是APP达人,喜欢试用各种APP,你肯定会发现越来越多的APP開始动效化. ...

  5. iOS 停止不必要的UI动效设计

    http://www.cocoachina.com/design/20151124/14400.html 前言:这篇短文将会探讨UI设计中动画的过度使用,并将其与早期的视觉设计进行对比,提出一些对于有 ...

  6. 前端必须收藏的CSS3动效库!!!

    现在的网站和App的设计中越来越重视用户体验,而优秀的动效则能使你的应用更具交互性,从而吸引更多用户的使用. 如果你对CSS3中定义动效还不熟练,或希望采用更加简单直接的方式在你的应用中引入动效的话, ...

  7. 【总结】前端必须收藏的CSS3动效库!!!

    现在的网站和App的设计中越来越重视用户体验,而优秀的动效则能使你的应用更具交互性,从而吸引更多用户的使用. 如果你对CSS3中定义动效还不熟练,或希望采用更加简单直接的方式在你的应用中引入动效的话, ...

  8. 巧用 -webkit-box-reflect 倒影实现各类动效

    在很久之前的一篇文章,有讲到 -webkit-box-reflect 这个属性 -- 从倒影说起,谈谈 CSS 继承 inherit -webkit-box-reflect 是一个非常有意思的属性,它 ...

  9. Google I/O 官方应用中的动效设计

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jILRvRTrc/article/details/82881743 作者:Nick Butcher, ...

随机推荐

  1. 《FTL之垃圾回收、写放大和OP 》总结

    来自 http://www.ssdfans.com/?p=1840: 写放大WA: 对空盘来说(未触发GC),写放大一般为1,即Host写入多少数据,SSD写入闪存也是多少数据量(这里忽略SSD内部数 ...

  2. CentOS6.8 yum 安装 mysql5.7.12 完美步骤

    一,wget http://dev.mysql.com/get/mysql57-community-release-el6-8.noarch.rpm 二,yum localinstall mysql5 ...

  3. POJ1269:Intersecting Lines(判断两条直线的关系)

    题目:POJ1269 题意:给你两条直线的坐标,判断两条直线是否共线.平行.相交,若相交,求出交点. 思路:直线相交判断.如果相交求交点. 首先先判断是否共线,之后判断是否平行,如果都不是就直接求交点 ...

  4. 数据结构-平衡二叉树 旋转过程平衡因子分析 c和java代码实现对比

    平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且 ...

  5. struct初始化

    C语言中struct初始化 • 普通结构体的初始化 假设我们有如下的一段代码,其中已有Student结构体,要求实例化一个Student对象并将其初始化. #include <stdio.h&g ...

  6. 学习完成CSS布局(左右浮动)

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  7. lower_bound()函数,upper_bound()函数

    1.查找:STL中关于二分查找的函数有三个lower_bound .upper_bound .binary_search .这三个函数都运用于有序区间(当然这也是运用二分查找的前提),下面记录一下这两 ...

  8. vue生命周期探究(二)

    vue生命周期探究(二) 转载自:https://segmentfault.com/a/1190000008923105 上一章我们介绍了vue的组件生命周期和路由勾子,这一章,让我们来看看在vue- ...

  9. BZOJ 5427: 最长上升子序列

    $f[i] 表示长度为i的最长上升子序列的最后一位的最小值是多少$ 对于普通的$LIS我们可以二分确定位置去更新$ 再来考虑对于这个,如果有某一位没有确定的话 那么这一位是可以随便取的,也就是说,所有 ...

  10. ANE报错fix:Could not generate timestamp: Connection reset.

    如果你打包ANE时候 报了:Could not generate timestamp: Connection reset. 那么很有可能你用了JDK 1.8. 解决方案一 退回到 JDK 1.7,重新 ...