vue-router 2.0 经常使用基础知识点之router-link

1,$route.params

类型: Object
一个 key/value 对象,包含了 动态片断 和 全匹配片断,若是没有路由参数,就是一个空对象。
path: '/detail/:id' 动态路径参数 以冒号开头javascript

const routes = [
    {path: '/detail/:id', component: Detail, name: 'detail', meta: {title: ''}},
    {path: '/activity', component: Activity, name: 'activity', meta: {isNeedAuth: false, title: '活动现场'}},
];

还能够在一个路由中设置多段『路径参数』,对应的值都会设置到 $route.params 中vue

1个参数

模式: /user/:username
匹配路径: /user/evan
$route.params:{ username: 'evan' }java

多个参数

模式: /user/:username/post/:post_id
匹配路径:/user/evan/post/123
$route.params:{ username: 'evan', post_id: 123 }app

复用组件时,想对路由参数的变化做出响应的话,你能够简单地 watch(监测变化) $route 对象:
const User = {
  template: '...',
  watch: {
    '$route' (to, from) {
      // 对路由变化做出响应...
    }
  }
}

或者像下面这样,只要$route发生变化,就能够作某事:post

export default {
  data () {
    return {}
  },
  watch: {
    // 若是路由有变化,会再次执行该方法
    '$route': 'doSomeThing'
  },
  methods: {
    doSomeThing(){}
  }
}
综合案例
// 当匹配到一个路由时,参数值会被设置到 this.$route.params,能够在每一个组件内使用。
// 能够经过this.$route.params.id来取上动态的id
<router-link :to="{path: '/detail/' + this.$route.params.id}" >
此团详情
</router-link>

// 还能够用命名路由的方式:
<router-link :to="{ name: 'detail', params:{ id: this.$route.params.id }}" >
此团详情
</router-link>

// 还能够用router.push()的方式
router.push({name:'detail', params: { id: this.$route.params.id}})

// 以上三种方式均可以实现跳转,均可以经过this.$route.params来取到参数

2,$route.query

类型: Object
一个 key/value 对象,表示 URL 查询参数。例如,对于路径 /foo?user=1,则有 $route.query.user == 1,若是没有查询参数,则是个空对象。this

// 动态数据的查询参数
  export default {
        data() {
            return {
                queryData: {}
            }
        },
        created() {
           this.$http.get(url)
              .then(function (response) {
                   // ...
                   if (data.code == 0) {
                       this.queryData.order_id = data.content.order_id;
                       this.queryData.business_id = data.content.business_id;
                       this.queryData.coupon_id = data.content.coupons.coupon_id;
                    }
                   // ...
              }, function (response) {
                   // ...
              })
        },
    }

// 使用
<router-link :to="{ path: '/backend/verify_coupon', query:this.queryData }">验证抵扣券</router-link>

3,定义路由的时候能够配置 meta 字段

// 举个例子
const routes = [
    {path: '/activity', component: Activity, name: 'activity', meta: {isNeedAuth: false, title: '活动现场'}},
];

实际工做中使用的时候就能够像下面这样:url

import { setTitleHack } from './utils';
import Activity from './views/activity.vue'
import Start from './views/start.vue'
// 定义路由的时候在meta中加入自定义字段
const routes = [
    {path: '/activity', component: Activity, name: 'activity', meta: {isNeedAuth: false, title: '活动现场'}},
    {path: '/start', component: Start, name: 'start', meta: {isNeedAuth: false, title: '活动现场'}},
];
const router = new VueRouter({...});
router.beforeEach((to, from, next) => {
    // 动态修改页面的title
    setTitleHack(to.meta.title);
     // 根据自定义的路由元信息来作判断:
    if (to.meta.isNeedAuth !== false) {
        // do something
    } else {
        // do something
    }
    next();
});

4,append

设置 append 属性后,则在当前(相对)路径前添加基路径。例如,咱们从 /a 导航到一个相对路径 b,若是没有配置 append,则路径为 /b,若是配了,则为 /a/bcode

<router-link :to="{path:'/coupon/detail/'+item.order_id, append:'true'}"></router-link>

若是上面这个路由是从home页面跳转过来,获得的结果就是/home/coupon/detail/idcomponent

5,active-class

类型: string
默认值: "router-link-active"
设置 连接激活时使用的 CSS 类名。默认值能够经过路由的构造选项 linkActiveClass 来全局配置。orm

<router-link tag="li" :to="{path:'/home', activeClass: 'bottom-nav-active'}"></router-link>

7,综合案例

// 命名路由,append 属性,查询参数,router-link渲染成<li>标签
<router-link tag="li" :to="{name:'demandindex', append:true,  query: {isFormBackend: 1}, activeClass: 'bottom-nav-active'}">
</router-link>

// to的值:字符串形式
<router-link to="banner.image_url" ></router-link>

// to的值:对象形式,拼接多个动态参数
<router-link :to="{path: '/my/modify?modify=fullname&val=' + profile.nickname}" ></router-link>

// to的值:对象形式
<router-link :to="{path: '/home'}">返回首页</router-link>

// to的值:对象形式,拼接动态参数
<router-link to="{path: '/backend/coupon_order_detail/' + product.order_id+'?order_status='+product.order_status}"></router-link>

// to的值:对象形式,带一个路径参数
<router-link :to="{path: '/detail/' + this.$route.params.id}" ></router-link>
相关文章
相关标签/搜索