• Vue2.0的变化(2)———vue2.0动画的变化、vue-2.0路由的变化


    之前讲解的都是vue1.0的使用,现在我们开始介绍vue2.0,
    这里的介绍是在vue1.0的基础上进行介绍的,主要介绍的是同vue1.0版本相比2.0的变化

    vue2.0动画的变化:
    现在变成:
    <transition>
      运动东西(元素,属性,路由.....);
    </transition>

    class的定义:
      .fade-enter{} //初始状态
      .fade-enter-active{} //变化成什么样 --当元素出来(显示)
      .fade-leave{} //可不写
      .fade-leve-active{} //变化成什么样 --当元素离开(隐藏)

     

    vue2.0给transition动画加的默认事件
      @before-enter="beforeEnter" //动画enter进入之前
      @enter="enter" //动画enter进入中
      @afterEnter="afterEnter" //动画enter进入之后
      @beforeLeave="beforeLeave" //动画leave离开之前
      @leave="leave" //动画leave离开中
      @afterLeave="afterLeave" //动画leave离开之后
      并且每个事件都有el参数,表示当前元素
      beforeEnter(el){}


    transition如何与animate.css配合用?
    transition只能让其下面第一层元素运动
    1)让一个元素运动时
      <div id="box">
        <input type="button" value="点击显示隐藏" @click="show=!show">
        <transition enter-active-class="animated zoomInLeft" leave-active-class="animated zoomOutRight">
          <div class="div1" v-show="show"></div>
        </transition>
      </div>


    2)多个元素运动时,要用transition-group,并且绑定key 属性
      <div id="box">
        <input type="button" value="点击显示隐藏" @click="show=!show">
        <transition-group enter-active-class="animated zoomInLeft" leave-active-class="animated zoomOutRight">
          <div class="div1" v-show="show" :key="1"></div>
          <div class="div1" v-show="show" :key="2"></div>
        </transition-group>
      </div>

      <script>
        new Vue({
          el:'#box',
          data:{
            show:false
          }
        });
      </script>

    transition与animate.css结合使用示例:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title></title>
     6     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
     7     <meta name="apple-mobile-web-app-capable" content="yes">
     8     <meta name="apple-mobile-web-app-status-bar-style" content="black">
     9     <style>
    10         p{
    11             100px;
    12             height:100px;
    13             background: red;
    14             margin:10px auto;
    15         }
    16     </style>
    17     <script src="vue.js"></script>
    18     <link rel="stylesheet" href="animate.css">
    19     <script>
    20         window.onload=function(){
    21             new Vue({
    22                 el:'#box',
    23                 data:{
    24                     show:'',
    25                     list:['apple','banana','orange','pear']
    26                 },
    27                 computed:{
    28                     lists:function(){
    29                         var arr=[];
    30                         this.list.forEach(function(val){
    31                             if(val.indexOf(this.show)!=-1){  //indexOf查找在数组中返回的位置,没有查找到则返回-1
    32                                 arr.push(val);
    33                             }
    34                         }.bind(this));
    35                         return arr;
    36                     }
    37                 }
    38             });
    39         };
    40     </script>
    41 </head>
    42 <body>
    43     <div id="box">
    44         <span>请在文本框中输入字母a,b,c,e,o等</span>
    45         <br/><br/>
    46         <input type="text" v-model="show">
    47 
    48         <transition-group enter-active-class="zoomInLeft" leave-active-class="zoomOutRight">
    49             <p v-show="show" class="animated" v-for="(val,index) in lists" :key="index">
    50                 {{val}}
    51             </p>
    52         </transition-group>
    53     </div>
    54 </body>
    55 </html>

    vue-2.0路由变化:
      网站:http://router.vuejs.org/zh-cn/index.html
      下载vue-router#2.0-->bower install vue-router

    vue-router2.0变化:
    布局变化:
      <div id="box">
        <div>
          <router-link to="/home">主页</router-link>
          <router-link to="/news">新闻</router-link>
        </div>
        <div>
          <router-view></router-view>
        </div>
      </div>


    js变化:
    <script>
      //准备组件
      var Home={
        template:'<h3>我是主页</h3>'
      };
      var News={
        template:'<h3>我是新闻</h3>'
      };
      //配置路由
      var routes=[
        {path:'/home',component:Home},
        {path:'/News',component:News},
        {path:'*',redirect:'/home'} //重定向,默认打开的是主页,之前的router.reditect已经废弃
      ];
      //生成路由实例
      const router=new VueRouter({
        routes
      });
      //最后挂到vue上
      new Vue({
        router,
        el:'#box'
      });
    </script>

    ---------------------------------------------
    路由的嵌套:/user/username
    html代码:
      <div id="box">
        <div>
          <router-link to="/home">主页</router-link>
          <router-link to="/user">用户</router-link>
        </div>
        <div>
          <router-view></router-view>
        </div>
      </div>


    js代码:
    <script>
      //准备组件
      var Home={
        template:'<h3>我是主页</h3>'
      };
      var User={
        template:`
          <div>
            <h3>我是用户信息</h3>
            <ul>
              <li>
                <router-link to="/user/username">用户名</router-link>
              </li>
            </ul>
            <div>
              <router-view></router-view>
            </div>
          </div>
        `
      };
      var UserDetail={
        template:'<p>我是xxx用户</p>'
      };
      //配置路由
      var routes=[
        {path:'/home',component:Home},
        {
          path:'/user',
          component:User,
          children:[ //核心,routes怎么配,children就怎么配
            {path:'username',component:UserDetail}
          ]
        },
        {path:'*',redirect:'/home'} //重定向,默认打开的是主页
      ];
      //生成路由实例
      const router=new VueRouter({
        routes
      });
      //最后挂到vue上
      new Vue({
        router,
        el:'#box'
      });
    </script>

    上面讲解应用示例:包含路由与动画配合使用(animate.css)

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title></title>
     6     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
     7     <meta name="apple-mobile-web-app-capable" content="yes">
     8     <meta name="apple-mobile-web-app-status-bar-style" content="black">
     9     <style>
    10         .router-link-active{
    11             font-size: 20px;
    12             color:#f60;
    13         }
    14     </style>
    15     <script src="vue.js"></script>
    16     <script src="bower_components/vue-router/dist/vue-router.min.js"></script>
    17     <link rel="stylesheet" href="animate.css">
    18 </head>
    19 <body>
    20     <div id="box">
    21         <input type="button" value="添加一个路由" @click="push">
    22         <input type="button" value="替换一个路由" @click="replace">
    23         <div>
    24             <router-link to="/home">主页</router-link>
    25             <router-link to="/user">用户</router-link>
    26         </div>
    27         <div>
    28             <transition enter-active-class="animated bounceInLeft" leave-active-class="animated bounceOutRight">
    29                 <router-view></router-view>
    30             </transition>
    31         </div>
    32     </div>
    33 
    34     <script>
    35         //组件
    36         var Home={
    37             template:'<h3>我是主页</h3>'
    38         };
    39         var User={
    40             template:`
    41                 <div>
    42                     <h3>我是用户信息</h3>
    43                     <ul>
    44                         <li><router-link to="/user/strive/age/10">Strive</router-link></li>
    45                         <li><router-link to="/user/blue/age/80">Blue</router-link></li>
    46                         <li><router-link to="/user/eric/age/70">Eric</router-link></li>
    47                     </ul>
    48                     <div>
    49                         <router-view></router-view>
    50                     </div>
    51                 </div>
    52             `
    53         };
    54         var UserDetail={
    55             template:'<div>{{$route.params}}</div>'
    56         };
    57 
    58         //配置路由
    59         const routes=[
    60             {path:'/home', component:Home},
    61             {
    62                 path:'/user',
    63                 component:User,
    64                 children:[
    65                     {path:':username/age/:age', component:UserDetail}
    66                 ]
    67             },
    68             {path:'*', redirect:'/home'}  //404
    69         ];
    70 
    71         //生成路由实例
    72         const router=new VueRouter({
    73             routes
    74         });
    75 
    76 
    77         //最后挂到vue上
    78         new Vue({
    79             router,
    80             methods:{
    81                 push(){
    82                     router.push({path:'home'});
    83                 },
    84                 replace(){
    85                     router.replace({path:'user'});
    86                 }
    87             }
    88         }).$mount('#box');
    89     </script>
    90 </body>
    91 </html>

    脚手架中vue-loader的变化
    main.js中
    之前vue1.0中
      new Vue({
        el:'#app',
        components:App
      });
    现在:
      new Vue({
        el:'#app',
        render h => h(APP)
      });

  • 相关阅读:
    【Java】-NO.16.EBook.4.Java.1.012-【疯狂Java讲义第3版 李刚】- Swing
    【MySQL】-NO.21.MySQL.1.MySQL.1.001-【Install MySQL5.7 On Windows】
    【Java】-NO.17.EBook.4.Java.1.014-【疯狂Java讲义第3版 李刚】- Annotation
    【Java】-NO.20.Exam.1.Java.1.001- 【1z0-807】- OCEA
    【Java】-NO.16.EBook.4.Java.1.005-【疯狂Java讲义第3版 李刚】- 枚举
    【Java】-NO.16.EBook.4.Java.1.006-【疯狂Java讲义第3版 李刚】- 垃圾回收
    【Java】-NO.16.EBook.4.Java.1.008-【疯狂Java讲义第3版 李刚】- 集合/容器
    【Java】-NO.16.EBook.4.Java.1.009-【疯狂Java讲义第3版 李刚】- 泛型
    【Java】-NO.16.EBook.4.Java.1.010-【疯狂Java讲义第3版 李刚】- 异常
    【Java】-NO.16.EBook.4.Java.1.001-【疯狂Java讲义第3版 李刚】- UML
  • 原文地址:https://www.cnblogs.com/yufann/p/Vue-Node7.html
Copyright © 2020-2023  润新知