美文网首页
28-声明式和编程式路由

28-声明式和编程式路由

作者: 早起的鸟儿 | 来源:发表于2019-10-30 15:05 被阅读0次

分为两种:
一、声明式:

<router-link :to="...">

二、编程式:

router.push(...)
声明式

<router-link> 组件支持用户在具有路由功能的应用中 (点击) 导航。 通过 to 属性指定目标地址,默认渲染成带有正确链接的 <a> 标签,可以通过配置 tag 属性生成别的标签.。另外,当目标路由成功激活时,链接元素自动设置一个表示激活的 CSS 类名

一、参数设置:

  1. 参数to:
<!-- 字符串 -->
<router-link to="home">Home</router-link>
<!-- 渲染结果 -->
<a href="home">Home</a>

<!-- 使用 v-bind 的 JS 表达式 -->
<router-link :to="home">Home</router-link>

<!-- 同上 -->
<router-link :to="{ path: 'home' }">Home</router-link>

<!-- 命名的路由 -->
<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>

<!-- 带查询参数,下面的结果为 /register?plan=private -->
<router-link :to="{ path: 'register', query: { plan: 'private' }}">Register
</router-link>

当你点击 <router-link> 时,router.push()方法会在内部调用,所以说,点击 <router-link :to="..."> 等同于调用 router.push(...)

  1. replace:

设置 replace 属性的话,当点击时,会调用 router.replace() 而不是 router.push(),于是导航后不会留下 history 记录。

<router-link :to="{ path: '/abc'}" replace></router-link>
  1. tag:

有时候想要 <router-link> 渲染成某种标签,例如 <li>。 于是我们使用 tag prop 类指定何种标签,同样它还是会监听点击,触发导航。

<router-link to="/foo" tag="li">foo</router-link>
<!-- 渲染结果 -->
<li>foo</li>

更多参数查看:https://router.vuejs.org/zh/api/#router-link

二、如何获取参数:

//用params传参数 获取值
<p>提示:{{this.$route.params.id}}</p>
//用query传参数 获取值
<p>提示:{{this.$route.query.id}}</p>

三、params 和 query 传参的区别:
1、使用params传参时 参数是不会出现在url的路径上面, 但是在刷新页面时params里面的数据会消失,params只能用name来引入路由
地址栏展现形式http://localhost:8866/todolist
但是如果想要params传参 刷新页面参数不消失,可以在路由中设置对应的参数 地址栏展现形式和query有所区别http://localhost:8866/todolist/123

  {
    path: '/todolist/:id',
    name: 'ToDoList',
    component: () => import('../views/todoList.vue')
  },

2、query传参时 参数出现在url的路径上面, 刷新页面时query里面的数据不变,而query 要用path或者name引入
地址栏展现形式http://localhost:8866/todolist?id=123

四、router、route区别:
1.router是VueRouter的一个对象,通过Vue.use(VueRouter)和VueRouter构造函数得到一个router的实例对象,这个对象中是一个全局的对象,他包含了所有的路由包含了许多关键的对象和属性。
2.route是一个跳转的路由对象,每一个路由都会有一个route对象,是一个局部的对象,可以获取对应的name,path,params,query等


image.png
编程式:

实际情况下,有很多按钮在执行跳转之前,还会执行一系列方法,这时可以使用 this.$router.push(location) 来修改 url,完成跳转

一、push方法

// 字符串
router.push('home')

// 对象
router.push({ path: 'home' })

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

// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})

二、replace方法:
跟 router.push 很像,唯一的不同就是,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录。

router.replace(...)

三、go方法
这个方法的参数是一个整数,意思是在 history 记录中向前或者后退多少步,类似 window.history.go(n)

// 在浏览器记录中前进一步,等同于 history.forward()
router.go(1)

// 后退一步记录,等同于 history.back()
router.go(-1)

// 前进 3 步记录
router.go(3)

// 如果 history 记录不够用,那就默默地失败呗
router.go(-100)
router.go(100)

目标页面获取参数的方法和router-link保持一致。

相关文章

  • vue-router 基础技术点

    路由实现的方式 声明式。 编程式。router.push(...) ...

  • vue路由跳转

    1、router-link (声明式路由) 2、router.push(编程式路由) 注意:如果提供了 path,...

  • vue路由 filters方法和filter过滤用法总结

    限制单行文字长度 路由传参写法 ---- 声明式 路由传参写法 ---- 编程式 路由传参写法 ---- 路由里要...

  • vue-router路由跳转参数的传递和接收

    路由跳转的方式(编程式,声明式) 1.编程式 this.$router.push()有四种方式 // 字符串thi...

  • vue-router路由拦截器

    Vue Router 是vue.js官方路由管理器 路由出口 声明式导航 编程式导航 全局前置守卫 全局后置钩子 ...

  • 编程式和声明式路由跳转

    声明式 当你想在一个页面嵌套子路由,并且不跳转页面的时候,我觉得这个超好用啊,子页面就会渲染在router-vie...

  • Vue编程式导航、命名路由、命名视图

    前言 正如标题所示,本节我们将对编程式路由、命名路由和命名视图进行初步探索。所谓编程式导航是与前面我们使用的标签式...

  • Spring事务管理机制(转载)

    Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式事务,编程式事务在实际开发中得不到广泛使用,...

  • ☆Spring 事务机制详解

    Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式事务,编程式事务在实际开发中得不到广泛使用,...

  • Spring事务总结

    1. 编程式事务和声明式事务 spring支持编程式事务管理和声明式事务管理两种方式。 编程式事务Spring推荐...

网友评论

      本文标题:28-声明式和编程式路由

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