美文网首页
vue-cli路由vue-router

vue-cli路由vue-router

作者: 大菜鸟呀 | 来源:发表于2018-07-28 14:09 被阅读28次

    一、安装
    1、下载模板vue init webpack vue-example
    2、进入vue-example 下载模板npm install
    3、启动应用:npm run dev


    <style scoped></style>表示局部有效
    配置路由:

    export default new Router({
      mode: 'history',  //路由模式(history模式可以去掉 #)
    routes: [
        {
          path: '/',
          name: 'HelloWorld',
          component: HelloWorld
        },
        {
            path: '/home',
            name: 'home',
            component: Home,
            alias: '/index'   //配置路由别名(即 访问'index'相当于访问'/home'  )
        }
    ]
    })
    

    滚动行为-----刷新记录鼠标位置:

    路由配置:
    scrollBehavior(to,from,savePosition){  
    <!--点击浏览器 前进、后退或者切换导航时调用:
    to:目标路由对象,去哪里
    from:离开的路由对象,从哪里来
    savePosition:记录滚动条坐标(点击前进后退时)-->
            if (savePosition) {
                return savePosition
            }else{
                return {
                    x:0,
                    y:0
                }
            }
    <!--也可以用hash设置-->
    HTML:
    导航:<router-link :to="{path:'/documents#abc'}">documents</router-link>
    document.vue: <p id='abc'>定位到这个元素</p>
    
            if (to.hash) { //也在scrollBehavior函数里面
                return {
                    selector:   to.hash
                }
            }
    

    点击标签的各种方式:

    //点击标签的各种方式:
          <li> //动态绑定
              <router-link :to='index' tag='div'>home</router-link>
            </li>
            <li> //json模式
              <router-link :to="{path:'/documents'}">documents</router-link>
            </li>
            <li>//直接指定路径
              <router-link to='/about'>about</router-link>
            </li>
            <li>
              <router-link to='/user'>用户信息</router-link>
            </li> //tag 可以指定生成li标签
            <router-link :to='index' tag='li'>
              <i></i>
              <span>这是span</span>
            </router-link>
    
    激活的导航有一个class:router-link-active,
    或者自定义类名:
    全部配置:路由里面配置:router-link-active:'isActive' //约定名称
    行间设置: <router-link active-class='activeClass'></router-link>
    配置事件(鼠标移入切换):<router-link  event='mouseover'></router-link>
    严格模式:<router-link  exact='true'></router-link>
    

    重定向和别名:

    {
            path: '*',
            component: s404  //渲染404组件
            //重定向,指向home:redirect: '/home' 
            //动态指定:
            /**      redirect:(to)=>{  //动态设置重定向的目标
                                  //目标路由对象,就是访问的路径的路由信息
              *         if(to.path==='/123'){
              *             return '/home'
              *         }else{
              *         return {name:'about'}
              *     }
              */    
        }
    

    嵌套路由:

    about.vue:
    <router-link to='about' tag='li'> <a>study</a></router-link> <!--设置默认子路由-->
    <router-link to='about/word' tag='li'><a> work</a></router-link>
    <router-link  :to={name:'word'}' tag='li'><a> work</a></router-link><!--可以设置name-->
    <!--渲染区域-->
    <router-view></router-view>
    路由设置:
    {
            path: '/about',
            component: About,
            children:[     //设置子路由
                {
                    path: 'study', //相对于根路径
                
                    component: study
                },
                    {
                    path: '',//设置默认子路由
                    component: word
                },
                 /* {
                    path: '/study',//加上'/' 路径相当于根路径
                    component: word
                }*/
            ]
        }
    设置子路由,不要给父路由设置name
    

    命名试图(一个页面需要两个组件视图):

    HTML:
    app.vue:
    <router-view name='slider'></router-view><!--给视图起个名字-->
    <router-view></router-view>
    路由:
    {
     path: '/document',
    name: 'Document',
    components:{
              default: document  //默认组件
              slider: slider  //name为slider的组件
        }
    }
    

    动态路径:

    匹配到的所有路由,全部映射到同一个组件上的时候,例如个人信息
    路径:/user/:userId   userId   为动态路径参数
    
    导航:<router-link to='user' tag='li'><a> work</a></router-link>
    user.vue:
    <router-link  
                          to=" '/user/' +item.type+'/'+item.id"    
                          key='index'    
                         v-for='item,index in userList'  
                         tag='li'
                          >{{item.id}}</router-link>
    <script>
    var list=[
        { id:1,name:'hh',age:'27',type:'vip'}
        { id:2,name:'xx',age:'18',type:'pt'}
    
    ]
    export default {
          data(){
              return{
                userList=list,
                userInfo={}
            }
      },
    created(){   声明周期函数
    <!--渲染组件会调用一次生命周期函数,复用组件不会调用
    地址一旦变化,会重新生成一个$route-->
        this.$route   //route实例对象(路由信息对象),表示当前激活的路由的状态信息
        this.$route.params就是userId
        let id=this.$route.params.userId
        this.userInfo=this.userList.filter((item)=>{ return item.id=id})[0]
        },
    watch:{   //监控数据变化
    $route(){
                   let id=this.$route.params.userId
                    this.userInfo=this.userList.filter((item)=>{ return item.id=id})[0]
              }
        }
    }
    
    </script>
    <!--
    router实例:
     this.$route.path 字符串,当前路由的路径
     this.$route.params  字符串,动态路由参数
     this.$route.query  字符串,URL查询字符串(?号后面的内容)
     this.$route.hash  字符串,当前路由的hash值
    -->
    路由:
    {
    path: '/user/ :type ?/ :userId? ',  
    <!--userId随便起的,?号表示能出现userId,那你也可以不出现userId-->
    component: user
    }
    

    查询字符串:

    方式一、<router-link to="?info='fenxiang' "  exact ></router-link> //exact=精确匹配
    方式二、<router-link   v-bind:to="{path:'',query:{info:'follow',a:'1'} }"  exact >
                     </router-link> //exact=精确匹配
    --------------------------------------------------------
    this.$route.query拿到值
    

    过渡动画:

    HTML:
    <transition   mode='out-in'>  //设置name可以自定义v-enter中 v的名称
            <router-view></router-view>
    </transition>
    
    style样式:
    v-enter:进入过度的开始状态  (变化类型:opacity:0)
    v-enter-active:进入活动状态,(时间:transition:2s)
    v-enter-to:进入的结束状态  (变化类型:opacity:1)
    v-leave:离开过度的开始状态 (变化类型:opacity:1)
    v-leave-active:离开活动状态  (时间:transition:2s)
    v-leave-to:离开的结束状态 (变化类型:opacity:0)
    

    编程式导航

    编程式导航:
            1、后退:this.$router.back()
            2、前进:this.$router.forward()
            3、指定前进或者后退的步数:this.$srouter.go()
            4、this.$router.push()导航到不同的URL,向历史纪录中添加一条
                            this.$router.push('/document')
                             this.$router.push({path:'/document',query:{  }  })
            5、this.$router.replace() 导航到不同的URl,替换历史纪录中的记录abcsefghijklmnopqrst
    
    

    钩子函数

    
    钩子函数:
    可以书写的位置:
          1、全局路由
          2、单个路由
          3、组件中
    -----------------------------
    路由:{
                path: '/document',
                meta: {
                                login:true,
                                title:1123
                        }
    }
    -----------------------------
            全局router实例: 
                    router.beforeEach:进入路之前
                          router.beforeEach((to,from,next)=>{
                                          if(to.meta.login){ //需要登陆
                                                               next('/loding')进入导航    
                                                            }
                                            next()进入导航
                                      })
    ------------------------------
                     router.afterEach:进入路由之后
                      router.afterEach((to,from)=>{
                                          if(to.meta.title){ //title存在
                                                     window.document.title=to.meta.title
                                                            }else{
                                                       window.document.title='哈哈'
                                                                      }
                                      })
    ----------------------------
    单个路由中:beforeEach  进入路由
    路由中:{
                        beforeEach(to,from,next){
                                        
                                        next()
                                    }
                      }
    
    ---------------------------------
    组件内:beforeRouteEnter 进入组件\beforeRouteUpdate 更新组件\beforeRouteLeave离开组件
    router.beforeEach(to,from,next){
                
                next(false)取消导航
    beforeCreate(){}//组件进入后的第一个生命周期函数
    export default {
            beforeRouteEnter(to,from,next){
                  
                  next((vm)=>{
                      vm.text(data数据)=' 123 '
                    })
                }
    }
    

    相关文章

      网友评论

          本文标题:vue-cli路由vue-router

          本文链接:https://www.haomeiwen.com/subject/xlsomftx.html