web前端面试题附答案044 - vue获取param参数,有什么缺点吗?

news2024/11/30 0:52:08

        看这个vue的图标像不像小时候看的《魔神坛斗士》身上的某个元素。真希望成年人的世界就像小时候一样简单快乐。

        今天这道面试题主要围绕vue中获取param参数展开,看完本文你可以吸取到以下知识点

        ◇ 首先是最基本的2中获取方式 

        ◇ 如果不用vue应该怎么获取,以及hash路由的获取问题

        ◇ 接着说一下这种传参的缺点

        ◇ 最后会细说我们可以用哪些代替方法

目录

一、vue中获取param参数

1、query形式

2、param的形式

3、原生方法URLSearchParams

4、传统的split方法截取

二、params取参有什么缺点吗

1、带#的情况获取不到search

2、中文参数容易乱码

3、破坏域名的美观性 

三、其他的替代传参方式

1、存入浏览器缓存中再跳转

2、vuex

3、有时候又不得不带参数


一、vue中获取param参数

        1、query形式

        例如列表页,需要跳转到详情页,经常要给详情页传一个id,有助于详情页利用获取到的这个id值进行查询详情信息。所以就涉及到列表页往详情页传递id。

        query形式的写法:

// router 文件
{
  path: '/detail',
  name: 'Detail',
  component: Detail
}

// list页跳转前
this.$router.push({
   path: '/detail',
   query : {
     bookId: 'DXF00137'
   }
})

// 页面Url示例
https://a.xx.com/detail?bookId=DXF00137

// detail页获取 bookId
created() {
  let bookId = this.$route.query.bookId
},

       

         2、param的形式

        还有一种形式,是将参数附着于URL本身,并不是问号后面挂接参数

// router 文件
{
  path: '/detail/:bookId',
  name: 'Detail',
  component: Detail
}

// list页跳转前
let bookId = 'DXF00137';
this.$router.push({
   path: '/detail/' + bookId,
})

// 页面Url示例
https://a.xx.com/detail/DXF00137

// detail页获取 bookId
created() {
  let bookId = this.$route.params.id
},

       

         3、原生方法URLSearchParams

        正常的页面url对于服务端来说是一个get请求,所以所有参数都会被带在url上,甚至会很长,比如https://a.xx.com?a=12&b=13&name=中国人&class=sdf 甚至有时候上面还会带一些特殊符号,带中文等等,那么不用vue的时候呢,都是这样获取的:

// 例如当前url https://a.xx.com?name=44

function geturlparam(key){
   let url = window.location.href;
   let params = url.split('?')[1]
   let getParam = new URLSearchParams(p);
   return getParam.get(key);
}
geturlparam('name'); // 44

       

        4、传统的split方法截取

                如果不借助原生方法,也不用使用框架方法,在之前jquery时代,大家都是通过先截取问号,再截取一个一个的&符号进行获取,代码就像这样:

// 例如当前url https://a.xx.com?name=44

function geturlparam(key){
   var searchQuery = window.location.search.substring(1);
   var params = query.split("&");
    for (var i=0;i<params.length;i++) {
        var par = params[i].split("=");
        if(par [0] == key){return par [1];}
    }
    return null;
}
geturlparam('name'); // 44

二、params取参有什么缺点吗

       

        1、带#的情况获取不到search

        不仅仅是vue,很多框架为了前端性能,采取了hash路由的方式,但这种方式通过window.location.search却获取不到值,返回的是null

        因为window.location.search获取的是 ? 之后一直遇到 #  ,如果没有 # 那么获取的就是 ? 之后的那些参数

        比如我们的url 经常是  http://localhost:8080/#/list?taskName=33  这种情况是获取不到window.location.search的值的

        这个时候可以这样获取:

function geturlparam(key){
   var newSearch = window.location.hash.split("?")[1];
   if(newSearch){
      var reg = new RegExp("(^|&)"+ key +"=([^&]*)(&|$)");
      var paramArr = reg.match(reg);
      if(paramArr != null) {
          return decodeURIComponent(paramArr[2]);
       }
       return null;
   }
}

       

        2、中文参数容易乱码

        前面的例子传递的参数都是数字或者英文字符,所以是没有问题的,但很多浏览器目前对于url带中文还是支持的不够好,会出现乱码。之前的IE浏览器就经常出现这种问题。

        所以在传输过程中,需要进行必要的编码与解码。

        

       

        3、破坏域名的美观性 

          有个非常赚钱的行业叫炒米,就是买卖域名。买家希望买到的域名是简短的,有含义的,大厂不惜高价买一个域名用,说明域名的作用是非常重大的。

        但这么有价值的域名,在我们广大开发人员手中发挥出了他本不应该承受的重量。例如www.aa.com/list/detail?stuName=楚中天&gender=中 .

        可见一个非常完美的域名,本该是一个让人赏心悦目的艺术品,但一旦用于具体业务,就掺杂了各种url,参数,有的还有带很长一串标识的。

三、其他的替代传参方式

       

         1、存入浏览器缓存中再跳转

        不管是cookie,还是localStorage存储,存放一个url的参数还是没有问题的,可以在页面跳转之前先将参数存入浏览器缓存,当跳转到下一个页的时候再进行获取。

        这样不仅不会使url带有很多参数而感到丑陋,还可以携带更多的参数信息过来

       

         2、vuex

        △ 如果是单页面应用的项目,可以利用vuex的store将要携带的参数暂时存储起来。到了下一个页面就可以自动获取,这样还节省了与浏览器交互的时间。

       △  但这种方式使用场景会有问题,如果是在浏览器呢,用户是可以刷新页面的,一旦在第二个页面刷新一下,上一个页面存到store里的数据就丢失了;

        △ 但如果是嵌套在APP内部的webview里,用户就刷新不了页面,从而避免store丢失的问题

       

         3、有时候又不得不带参数

        例如一些站外引流的场景,当用户把某个页面分享到facebook这些社交软件,朋友在跳回来的时候,为了业务需要,必然是要携带上参数的,这种情况就不可避免了。以上2中方法都无效了。

        

        我想如果这样回答这道题,应该是可以过关了吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/3216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux查看性能相关命令

#Linux查看性能相关命令 ##CPU性能 ###/cat/proc/cpuinfo 这个文件能够获取到物理cpu的数量,每个物理cpu的核心数,是否开启超线程等信息 物理cpu: 表示主板上实际存在的cpu数量 cpu核数: 单个cpu上可以处理数据的芯片组数量,如双核,四核等 逻辑cpu数量: 一般来说&#xff0c;…

数据链路层 随机接入-CSMA/CA协议

媒体接入控制-动态接入控制-随机接入 CSMA/CA协议 载波监听多址接入/碰撞避免CSMA/CA 既然CSMA/CA协议已经成功的应用于使用广播信道的有限局域网&#xff0c;那么同样使用广播信道的无线局域网能不能也使用CSMA/CD协议呢&#xff1f; 在无线局域网中&#xff0c;仍然可以使…

httpClient同步、异步性能对比

0、测试目的 同步阻塞模式下&#xff0c;如果服务端接口响应较慢&#xff0c;那会直接影响客户端接口请求的吞吐量&#xff0c;虽然可以通过在应用代码中通过异步线程的方式优化&#xff0c;但是会增加客户端的线程开销。所以考虑用异步模式来解决这个问题 因此测试时&#x…

【网络篇】如何给虚拟机添加网卡,设置固定ip

引言 基于Centos7&#xff0c;准备两台虚拟机作为rac服务器。 以Oracle rac集群的配置说明。 网络分配 根据子网地址&#xff0c;我们给虚拟机分配如下ip: 名称公网私网网关rac1192.168.189.10192.168.83.10192.168.189.2rac2192.168.189.11192.168.83.11192.168.189.2 说明…

从零到一手写迷你版Vue

Vue响应式设计思路 Vue响应式主要包含&#xff1a; 数据响应式监听数据变化&#xff0c;并在视图中更新Vue2使用Object.defineProperty实现数据劫持Vu3使用Proxy实现数据劫持模板引擎提供描述视图的模板语法插值表达式{{}}指令 v-bind, v-on, v-model, v-for,v-if渲染将模板转…

高性能服务器之Reactor设计

今天来针对上一节课讲的多路转接知识再进一步进行设计&#xff0c;Reactor是基于epoll的ET模式设计的&#xff0c;在现在的高校和企业中是广泛应用的&#xff0c;今天我们来实现一个简洁版&#xff0c;完整版博主可没那个实力~ 目录 基本原理 代码实现 epoll_server.cc A…

当面试官让我回答React和Vue框架的区别......

我们为什么需要错误边界 在React组件中可能会由于某些JavaScript错误&#xff0c;导致一些无法追踪的错误&#xff0c;导致应用崩溃。部分 UI 的 JavaScript 错误不应该导致整个应用崩溃。为此&#xff0c;React引入了错误边界(Error Boundary)的概念&#xff1a;可以捕获发生…

MySQL搭建主从复制流程及相关问题

目录一、关于主从复制1.1 关于主从复制1.2 应用场景1.3 优缺点1.4 原理二、配置主从复制2.1 同步各个服务器的时间2.2 修改主库&#xff08;M1&#xff09;配置2.3 主库&#xff08;M1&#xff09;为从库&#xff08;S1\S2&#xff09;增加账号2.3 查看主库&#xff08;M1&…

欢迎女神科学家颜宁回国,并祝她如愿以偿

目录1、女神科学家颜宁是谁2、颜宁在深圳人才论坛最新演讲&#xff0c;以及招聘邮箱3、颜宁微博回应4、结论与展望最近女神科学家颜宁回国了&#xff0c;整个科学界和中国都沸腾了&#xff0c;也上了热搜&#xff0c;成了热门话题&#xff0c;越来越多的海归精英选择回国 1、…

Python 和Java 哪个更适合做自动化测试?

很多小伙伴在功能测试行业工作了2、3年后&#xff0c;发现自己已经把功能测试做的非常好了&#xff0c;已经到职业发展和薪资发展的瓶颈期了&#xff0c;就想着学点东西&#xff0c;提升一下技能。 而对于功能测试升级来说&#xff0c;一般有这么3个主流的发展方向&#xff1a;…

事件/边沿检测--上升沿检测、下降沿检测

检测上升沿&#xff1a;&#xff08;从低到高的跳变 __| ) input sig_a; reg sig_a_d1; wire sig_a_risedge; alaways (posedge clk or negedge rstb) begin if(!rstb) sig_a_d1 < 1b0; else sig_a_d1 < sig_a; end assign sig_a_risedge sig_a & !sig_a_d1; …

【02】概率图模型在真实世界中的应用案例

概率图模型在真实世界中的应用案例 概率图模型有许多不同的实际应用。 为了激起大家对概率图模型的兴趣&#xff0c;也为了让大家能够对概率图模型有感性的认知&#xff0c;本章我会分享概率图模型的诸多实际应用案例。 文章目录图像中的概率模型图像生成图像修复图像降噪语言…

【Python百日进阶-WEB开发】Day171 - Django案例:03配置工程日志

文章目录八、配置工程日志8.1 目的和原因8.2 配置工程日志的步骤8.2.1 配置工程日志8.2.2 准备日志文件目录8.2.3 日志器记录器的使用8.2.4 Git管理工程日志九、配置前端静态文件9.1 准备静态文件9.2 指定静态文件的加载路径十、相关文档八、配置工程日志 8.1 目的和原因 目的…

什么是跨域?以及解决方案

现在的web项目&#xff0c;很多都是前后端分离&#xff0c;特别容易出现跨域问题 那么什么是跨域问题呢?本篇文章带你彻底从本质上弄明白什么是跨域问题以及如何解决 一、跨域有什么现象 首先我们看一下现象&#xff0c;如何出现的跨域问题。例&#xff1a; 前段&#xff1a…

【Linux】基础IO —— 上

&#x1f387;Linux&#xff1a;基础IO详解 博客主页&#xff1a;一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 看似不起波澜的日复一日&#xff0c;一定会在某一天让…

Web渗透测试攻防之浅述信息收集

前言 众所周知渗透测试的本质是信息收集&#xff0c;在渗透测试中信息收集的质量直接关系到渗透测试成果的与否。在对系统进行渗透测试前的信息收集是通过各种方式获取所需要的信息&#xff0c;收集的信息越多对目标进行渗透的优势越有利。通过利用获取到的信息对系统进行渗透…

Java Spring Cloud XVIII 之 Kafka I

Java Spring Cloud XVIII 之 Kafka I Kafka 1.Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台。Kafka最初是由LinkedIn开发&#xff0c;并随后于2011年初开源…

C++ 类和对象 (中)

作者&#xff1a;小萌新 专栏&#xff1a;C初阶 作者简介&#xff1a;大二学生 希望能和大家一起进步 本篇博客目标&#xff1a;梳理自己六个小时学到的知识 并且将类和对象知识分享给大家 专注的去做一件事 如果累了就去休息 C 类和对象 中本章学习目标前言一. 构造函数1.1 概…

破解系统密码与重装windows系统

数据来源 一、利用5次shift漏洞破解win7密码 1.1 漏洞 1. 在未登录时&#xff0c;连续按5次shift键&#xff0c;弹出程序C:\Windows\System32\sethc.exe 2. 部分win7及win10系统在未进入系统时&#xff0c;可以通过系统修复漏洞篡改系统文件名&#xff01; 注意&#xff1a;…

使用Maven部署到远程Linux服务器Tomcat

一、安装JDK 首先给服务器安装jdk&#xff0c;访问官网下载&#xff1a;Java Downloads | Oracle&#xff0c;下载图中的版本。首先我使用的是tomcat10&#xff0c;最低支持jdk1.8。安装了jdk19&#xff0c;是当时的最新版实测tomcat开启失败&#xff0c;新版jdk也不自带jre&a…