vue-router

路由安装

npm i vue-router -S

路由配置

//router/index.js
import Vue from 'vue'
import Router from 'vue-router'
/**
*引入相关组件Home、OrderingGuide、History、Delivery......
**/
Vue.use(Router)
export default new Router({
  routes: [
      {path:"/",name:"homeLink",component:Home,components:{
         //路由复用
        default:Home,
        "orderingGuide":OrderingGuide,
        "history":History,
        "delivery":Delivery
      }},
      {path:"/menu",name:"menuLink",component:Menu},
      {path:"/about",name:"aboutLink",component:About,redirect:"/history",children:[
          {path:'/contact',name:'contactLink',component:Contact,redirect:"/personName",children:[
          {path:'/phone',name:'phoneLink',component:Phone},
          {path:'/personName',name:'personNameLink',component:PersonName}
        ]}
      ]},
      {path:"*",redirect:"/"}
  ],
  mode:'history'
})

//index.js
import router from './router'
new Vue({
  el: '#app',
  router,
  components: { App },
  template: ''
})

路由跳转

//方法一:通过to跳转


//方法二:通过name跳转


//方法三:动态绑定属性
  • 主页
  • data(){return {HomeLink:'/'}} //方法四:通过按钮点击跳转 methods:{ goToMenu(){ //跳转到上一次浏览的页面 // this.$router.go(-1); //指定跳转的地址 //this.$router.replace("/menu"); //指定跳转路由的名字下 //this.$router.replace({name:'menuLink'}); //通过push进行跳转 //this.$router.push('/menu'); //this.$router.push({name:'menuLink'}); } } //tag
  • 主页
  • 路由传参-param
    使用params传参只能使用name进行引入
    http://localhost:8080/condition/test/27

    //基本配置
    {path:'/users/:name/:age',name:'users',component:Users}
    
    //方式一
    condition
    //方式二
    condition
    //方式三     
    condition
    goToUsers:function(){
        this.$router.push({
              name:'users',
              params: {
                name:'test',
                age: '27'
              }
          })
    }
    console.log(this.$route.params.name); 
    console.log(this.$route.params.age);
    

    路由传参-query
    query使用name来引入也可以传参,使用path也可以
    http://localhost:8080/condition?name=test&age=27

    //基本配置
    {path:'/users',name:'users',component:Users}
    
    //方式一
    condition
    //方式二
    condition
    //方式三    
    condition
    goToUsers:function(){
        this.$router.push({
              path:'/condition',
              query: {
                name:'test',
                age: '27'
              }
          })
    }
    console.log(this.$route.query.name); 
    console.log(this.$route.query.age);
    

    params是路由的一部分,如果这个路由有params传参,但是在跳转的时候没有传这个参数,会导致跳转失败或者页面会没有内容
    query是拼接在url后面的参数,没有也没关系
    使用a标签 和 使用router的区别

    //跳转,页面会重新加载
    
  • page1
  • //更新视图而不重新请求页面
  • page1
  • 全局守卫

    //进入组件之前
    router.beforeEach((to,from,next)=>{
      //alert("还未登录,请先登录");
      //next();
      //console.log(to);
    
      //判断store.gettes.isLogin===false;
      if(to.path=='/login' || to.path=='/register'){
         next();
      }else{
         alert("还未登录,请先登录");
         next("/login");
      }
    });
    

    全局后置钩子

    //进入组件之后
    router.afterEach((to,from)=>{
     alert("after each");
    })
    

    路由独享守卫

     {path:"/admin",name:"adminLink",component:Admin,beforeEnter:(to,from,next)=>{
            //路由独享守卫
            //alert("还未登录,请先登录");
            //next();
            //console.log(to);
            //判断store.gettes.isLogin===false;
             if(to.path=='/login' || to.path=='/register'){
               next();
             }else{
                 alert("还未登录,请先登录");
                 next("/login");
             }
    }}
    

    组件内守卫

    
    

    滚动行为

      mode:'history',
      scrollBehavior (to, from, savedPosition) {
        // return 期望滚动到哪个的位置
        //只支持在history.pushState的浏览器中可用
      
        if(savedPosition){
          return savedPosition;
        }else{
          return { x: 0, y: 0 };
        }
      }
    

    router
    $route 是“路由信息对象”,包括 path,params,hash,query,fullPath,matched,name 等路由信息参数。

    $router 是“路由实例”对象,即使用 new VueRouter创建的实例,包括了路由的跳转方法,钩子函数等。

    你可能感兴趣的:(vue-router)