通俗易懂地讲解 Vue-router

<head>
    <meta charset="UTF-8">
    <title>vuejs 教程</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <style>
        .router-link-active{
            font-size: 20px;
            color:#f60;
        }
    </style>
    <script src="vue.js"></script>
    <script src="bower_components/vue-router/dist/vue-router.min.js"></script>
</head>
<body>
    <div id="box">

        <div>
            <router-link to="/home">主页</router-link>
            <router-link to="/user">用户</router-link>
        </div>
        <div>
            <router-view></router-view>
        </div>
    </div>

    <template id="home">

        <div>
            <h3>我是用户信息</h3>
            <ul>
                <li><router-link to="/user/strive/age/10">Strive</router-link></li>
                <li><router-link to="/user/blue/age/80">Blue</router-link></li>
                <li><router-link to="/user/eric/age/70">Eric</router-link></li>
            </ul>
            <div>
                <router-view></router-view>
            </div>
        </div>

    </template>

    <script>
        //组件
        var Home={
            template:'<h3>我是主页</h3>'
        };
        var User={
            template:'#home'
        };
        var UserDetail={
            template:'<div>{{$route.params}}</div>'
        };

        //配置路由
        const routes=[
            {path:'/home', component:Home},
            {
                path:'/user',
                component:User,
                children:[
                    {path:':username/age/:age', component:UserDetail}
                ]
            },
            {path:'*', redirect:'/home'}  //404
        ];

        //生成路由实例
        const router=new VueRouter({
            routes
        });


        //最后挂到vue上
        new Vue({
            router
        }).$mount('#box');
    </script>
</body>

router说明:

  Router简单说明

  #使用程序跳转(类似angularjs的$state.go)
  this.$router.push(location, onComplete?, onAbort?);

  #返回历史页面 类似 history.go(-1)
  this.$router.go(-1)

  //router.back()、router.forward()

  #页面link使用
  <router-link :to="ch.url">{{ch.text}}</router-link>

  //或者 li>a 就这样

  <router-link tag="li" to="/home" active-class="active" :key="index">
    <a>Home</a>
  </router-link>
  • watch监控router
watch: {
  $route() 
    // 检查是否一级菜单链接
    this.checkMenuActived(this.$route.path);
  }
}
  • 路由对象,即$router会被注入每个组件中,可以利用它进行一些信息的获取

    $route.path   当前路由对象的路径,如’/view/a’
    $rotue.params  关于动态片段(如/user/:username)的键值对信息,如{username: ‘paolino’}
    $route.query   请求参数,如/foo?user=1获取到query.user = 1
    $route.router  所属路由器以及所属组件信息
    $route.matched 数组,包含当前匹配的路径中所包含的所有片段所对应的配置参数对象。
    $route.name    当前路径名字
    • 在每次发生路由导航是最开始先检测用户是否登录
router.beforeEach(({meta, path}, from, next) => {  

  const {auth = true} = meta      // meta代表的是to中的meta对象,path代表的是to中的path对象

  var isLogin = Boolean(store.state.user.id)    // true用户已登录, false用户未登录 
  
  if (auth  &&  !isLogin  &&  path !== '/login') {   // auth 代表需要通过用户身份验证,默认为true,代表需要被验证, false为不用检验
    return next({ path: '/login' })   //  跳转到login页面
  }


  next()   // 进行下一个钩子函数
})


它的三个参数:

to: (Route路由对象)  即将要进入的目标 路由对象       to对象下面的属性: path   params  query   hash   fullPath    matched   name    meta(在matched下,但是本例可以直接用)

from: (Route路由对象)  当前导航正要离开的路由

next: (Function函数)   一定要调用该方法来 resolve 这个钩子。
  • js路由跳转的几种方式
// 字符串
this.router.push('home')

// 对象
this.$router.push({path: '/login?url=' + this.$route.path});

// 命名的路由
router.push({ name: 'user', params: { userId: 123 }})

// 带查询参数,变成/backend/order?selected=2
this.$router.push({path: '/backend/order', query: {selected: "2"}});

// 设置查询参数
this.$http.post('v1/user/select-stage', {stage: stage})
      .then(({data: {code, content}}) => {
            if (code === 0) {
                // 对象
                this.$router.push({path: '/home'});
            }else if(code === 10){
                // 带查询参数,变成/login?stage=stage
                this.$router.push({path: '/login', query:{stage: stage}});
           }
});

// 设计查询参数对象
let queryData = {};
if (this.$route.query.stage) {
    queryData.stage = this.$route.query.stage;
}
if (this.$route.query.url) {
    queryData.url = this.$route.query.url;
}
this.$router.push({path: '/my/profile', query: queryData});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值