Vue路由query 和 params 传参的区别

简介: Vue路由query 和 params 传参的区别

通过 url 传递参数控制页面显示数据的两种方式


1. query 传统问号传参

url 格式:xxx.com/product?id=123

模板内获取数据:this.$route.query.id

2. params 动态路由匹配

url 格式:xxx.com/product/123

模板内获取数据:this.$route.params.id

注意这个方式参数字段名 id 要在路由配置中定义 用冒号的形式标记

参数可以继续拼接 /student/:id/:name/:age/:address

他必须严格按照 url 的配置格式访问

3. 如何选择哪一个传参方式

两个并没有高低之分


动态路由, 优点 ,好看整齐 缺点 必须预先定义, 如果参数多起来多起来不好管控

问号的形式 灵活随意想改就改, 想加就加, 缺点就是太丑陋了, 也不直观

params:/router1/:id ,    //router1/123,/router1/789 ,这里的id叫做params
query:/router1?id=123 ,  //router1?id=456 ,这里的id叫做query。

query 传参配置的是path,而params传参配置的是name,在params中配置path无效


query在路由配置不需要设置参数,而params必须设置


query传递的参数会显示在地址栏中


params传参刷新会无效,但是query会保存传递过来的值,刷新不变 ;


接收参数使用this.$router后面就是搭配路由的名称就能获取到参数的值

//query:
  {
  path: '/home',
  name: Home,
  component: Home
  }
 // params:
  {
  path: '/home/:id',
  name: Home,
  component: Home
  }

接口封装

import axios from 'axios'
import qs from 'qs'
import Vue from 'vue'
import store from '@/store'
// 创建一个 axios 实例
const service = axios.create({
  withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})
// 请求拦截
service.interceptors.request.use(
  config => {
    // do something before request is sent
    if (config.isLoading) loadingInstance = Vue.prototype.$baseLoading()
    if (process.env.NODE_ENV === 'development') {
      config.headers['debugMode'] = 'true'
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)
// 响应拦截
service.interceptors.response.use(
  response => {
    const res = response.data
    if (res.intRes === 1) { // 登录请求退出
      if (store.getters.empId) { // 如果登录过,提示会话失效
        Vue.prototype.$baseConfirm('会话已失效请重新登录', '会话失效', () => {
          window.location.href = process.env.VUE_APP_BASE_SSO_URL + window.location.href
        })
      }
      return res
    }
    if (res.intRes !== 0) {
      const msg = isEmpty(res.objRes) ? res.msgRes : res.objRes
      Vue.prototype.$baseMessage(msg, 'warning')
      return Promise.reject(res)
    } else {
      return res
    }
  },
  error => {
    return Promise.reject(error.response)
  }
)
//  get 和 post 请求封装
export default {
  get(url,params){
     return service.get(url,{params:params})
   },
   postJson(url,data){
     return service.post(url,data,
     {
       headers:{'ContentType':'application/json'}
     })
   },
   postForm(url, data, isLoading = true) {
    return service.post(url, qs.stringify(data), {
      isLoading: isLoading,
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
    })
  },
   }

image.png

相关文章
|
18天前
|
JavaScript 前端开发 开发者
Vue v-for 进阶指南:in 与 of 的区别及应用场景 | 笔记
Vue.js 中的 v-for 是强大的遍历指令,但其中的 in 和 of 关键字往往被开发者忽视。尽管它们的用法相似,但适用的场景和数据结构却各有不同。本文将详细探讨 v-for 中 in 和 of 的区别、适用场景以及在实际开发中的最佳使用时机。通过理解它们的差异,你将能够编写更加高效、简洁的 Vue.js 代码,灵活应对各种数据结构的遍历需求。
71 6
|
15天前
|
缓存 JavaScript
Vue 中 computed 与 method 的区别
【10月更文挑战第15天】computed 和 method 是 Vue 中两个重要的选项,它们在功能和特点上存在着明显的区别。理解并合理运用它们的区别,可以帮助我们构建更高效、更具可维护性的 Vue 应用。在实际开发中,要根据具体情况灵活选择使用,以满足不同的需求。
15 2
|
18天前
|
JavaScript 前端开发
Vue 2 和 Vue 3 之间响应式区别
10月更文挑战第7天
29 2
|
19天前
|
缓存 JavaScript Serverless
vue中computed计算属性、watch侦听器、methods方法的区别以及用法
vue中computed计算属性、watch侦听器、methods方法的区别以及用法
75 0
|
23天前
|
JavaScript
Vue路由传参实战指南:三种常用方法示例演示
Vue路由传参实战指南:三种常用方法示例演示
62 0
|
27天前
|
JavaScript API 开发工具
vue2和vue3版本区别
【10月更文挑战第4天】
|
1月前
|
JavaScript 前端开发
vue尚品汇商城项目-day01【7.路由传参】
vue尚品汇商城项目-day01【7.路由传参】
28 0
|
7天前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。
|
7天前
|
缓存 JavaScript 搜索推荐
Vue SSR(服务端渲染)预渲染的工作原理
【10月更文挑战第23天】Vue SSR 预渲染通过一系列复杂的步骤和机制,实现了在服务器端生成静态 HTML 页面的目标。它为提升 Vue 应用的性能、SEO 效果以及用户体验提供了有力的支持。随着技术的不断发展,Vue SSR 预渲染技术也将不断完善和创新,以适应不断变化的互联网环境和用户需求。
27 9
|
6天前
|
缓存 JavaScript UED
Vue 中实现组件的懒加载
【10月更文挑战第23天】组件的懒加载是 Vue 应用中提高性能的重要手段之一。通过合理运用动态导入、路由配置等方式,可以实现组件的按需加载,减少资源浪费,提高应用的响应速度和用户体验。在实际应用中,需要根据具体情况选择合适的懒加载方式,并结合性能优化的其他措施,以打造更高效、更优质的 Vue 应用。