vue 编程式导航与动态路由匹配

编程式导航

页面导航具有两种方式,

  • 第一种方式为声明式导航,就是通过 <a> 标签或者 <router-link> 标签,点击链接进行页面的跳转
  • 第二种方式为编程式导航,通过调用 JavaScript 的 API 实现页面的跳转。例如通过 location.href

Vue 中常见的编程式导航 API 如下:

  • this.$router.push():跳转到形参中的 hash 地址
  • this.$router.go():参数为正时,与前进按钮相同;参数为负时,与后退按钮相同。

如下代码所示:

HTML

<div class="container">
  <!-- 添加路由链接 -->
  <router-link to="/index">点击访问首页</router-link>
  <router-link to="/list">点击访问列表</router-link>
  <router-link to="/info"></router-link>
  <!-- 添加路由填充位 -->
  <router-view></router-view>
</div>

路由组件

// 定义路由组件
const index = {
  template: `<div>
    <h1>这是 index 组件</h1>
    <button @click='jump'>跳转至 info 组件</but
  </div>`,
  methods: {
    // 跳转至info
    jump() {
      this.$router.push('/info')
    }
  },
}
const list = {
  template: `<h1>这是 list 组件</h1>`
}
const info = {
  template: `<div>
    <h1>这里记载着用户信息</h1>
    <button @click='back'>go back</button>
  </div>`,
  methods: {
    back() {
      this.$router.go(-1)
    }
  },
}

路由对象

// 配置路由规则,创建路由实例
const router = new VueRouter({
  routes: [
    { path: '/index', component: index },
    { path: '/list', component: list },
    { path: '/info', component: info }
  ]
})

结果:
在这里插入图片描述

动态路由匹配

如果路由具有规律性,并且相似度很高时,推荐使用动态路由匹配,可以使代码的复用性变高。如下url 地址:

/user/foo/profile/1
/user/foo/profile/2
/user/foo/profile/3
/user/foo/profile/4

对于上面路径来说分别编写路由组件时非常难受的一件事,虽然有 CV 大法,但是谁不想装个 B 呢?

如果要使用动态路由匹配可以参考如下例子:

/user/foo/profile/:id

后面这个 :id 类似 nodejs 获取 Restful 形式 url 的方法。可以根据后面值的不同来进行匹配,
可以在模板中使用 $route.params.id 来显示后面不同的结果。

如下代码所示:

// 定义路由组件
const index = {
  template: `<h1>这是 index 组件</h1>`
}
const list = {
  template: `<h1>欢迎来到列表 {{ $route.params.id }}</h1>`
}

// 配置路由规则,创建路由实例
const router = new VueRouter({
  routes: [
    { path: '/index', component: index },
    { path: '/list/:id', component: list }
  ]
})
let vm = new Vue({
  el: '.container',
  router
})

HTML

<div class="container">
  <!-- 添加路由链接-->
  <router-link to="/index">点击访问首页</router-link>
  <router-link to="/list/1">列表1</router-link>
  <router-link to="/list/2">列表2</router-link>
  <router-link to="/list/3">列表3</router-link>
  <router-link to="/list/4">列表4</router-link>
  <router-view></router-view>
</div>

结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值