前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >query 和 params 传参的区别

query 和 params 传参的区别

原创
作者头像
xyzzz
修改2021-07-19 11:19:47
10.9K0
修改2021-07-19 11:19:47
举报
文章被收录于专栏:前端学习。前端学习。

通过 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. 如何选择哪一个传参方式

两个并没有高低之分

  • 动态路由, 优点 ,好看整齐 缺点 必须预先定义, 如果参数多起来多起来不好管控
  • 问号的形式 灵活随意想改就改, 想加就加, 缺点就是太丑陋了, 也不直观
代码语言:javascript
复制
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后面就是搭配路由的名称就能获取到参数的值

代码语言:javascript
复制
//query:
  {
  path: '/home',
  name: Home,
  component: Home
  }
  
 // params:
  {
  path: '/home/:id',
  name: Home,
  component: Home
  }

接口封装

代码语言:javascript
复制
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' }
    })
  },
   
   }

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. query 传统问号传参
  • 2. params 动态路由匹配
  • 3. 如何选择哪一个传参方式
  • 接口封装
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档