传参方式
|
技术点
|
缺点
|
|
params
|
用于组件传递,params刷新页面数据会丢失。
|
|
query
|
params和query,params传值刷新页面是要消失的,然而query却不会,两者的区别就在于query会把传递的参数显示在url地址中
|
|
vuex
|
通过vuex来存和取你的数据,把你的数据都存在vuex中,然后那个组件需要,直接调用vuex的getters来获取数据就行。
|
一、通过params传参
先在路由path里那个组件需要传递参数,定义一个参数,用于组件传递,params刷新页面数据会丢失。
先在路由path里那个组件需要传递参数,定义一个参数,用于组件传递,params刷新页面数据会丢失。
第一步:在路由中添加:(/:参数名/:参数名 这里的参数名要和传参时的字段名称一致)router文件中:
path: "/chatView/:user/:password"
第二步:在自己的组件中添加函数,路由切换时传递对应的参数
> 关键点: 1. 对象中参数:name名字要和路由中的name名称一致;
2. params属性要一致,里面传的参数名就是路由中(:)后面的名字
this.$router.push({
name: "ProDispatch",
params: {
projectId: row.projectId,
projectNumber: row.projectNumber,
第三步: 然后需要用的组件接受,通过beforeRouteEnter进入路由之前执行的函数
vm.projectObj 中的projectObj即为当前子页面所需要的属性名,然后赋值
beforeRouteEnter(to, from, next) {
// 接收父页面传递的参数,这种方式不会刷新丢掉数据
next((vm) => {
vm.projectObj = JSON.parse(to.params.projectObj);
二、通过query来传递参数(常用)
路由传值有两种方式,params和query,params传值刷新页面是要消失的,然而query却不会,两者的区别就在于query会把传递的参数显示在url地址中
第一步:直接在页面中,调用路由切换方法
关键点:path: 路由路径; query:如下放参数即可
this.$router.push({
path: "/project/process",
query: {
projectId: row.projectId,
projectNumber: row.projectNumber,
第二步: 然后需要用的组件接受,通过beforeRouteEnter进入路由之前执行的函数(和第一种相似的获取)
vm.projectId 中的projectId 即为当前子页面所需要的属性名,然后赋值
beforeRouteEnter(to, from, next) {
// 接收父页面传递的参数,这种方式不会刷新丢掉数据
next((vm) => {
vm.projectId= to.query.projectId;
vm.projectNumber = to.query.projectNumber
第二步:在子页面中直接获取,并赋值给对应的属性值 (推荐这个,不会出现获取晚报错的情况)
关键点: this.$route.query.父页面的属性名称
this.projectId = this.$route.query.projectId;
this.projectNumber = this.$route.query.projectNumber;
三、通过Vuex来存和获取参数
通过vuex来存和取你的数据,把你的数据都存在vuex中,然后那个组件需要,直接调用vuex的getters来获取数据就行。
第一步: 在你的getters文件中(前提是settings中间对应的方法已经写好,这边只是获取)
projectId: state => state.settings.projectId,
第二步: 在组件中如果想取到的话,直接通过计算属性来用:
computed:{
projectId(){
return this.$store.getters.projectId
直接用就行~~~~ this.projectId
传参方式 技术点 缺点 通过路由params传参 params 用于组件传递,params刷新页面数据会丢失。 通过路由query传参 query params和query,params传值刷新页面是要消失的,然而query却不会,两者的区别就在于query会把传递的参数显示在url地址中 通过vuex vuex 通过vuex来存和取你的数据,把你的数据都存在vuex中,然后那个组件需要,直接调用vu
path: 'data-detail-edit/:type',
component: () => import('@/views/cost/costDetail/index'),
name: 'test1'
params: { type: 1 },
path: '/detail/:id', //若id后面加?代表这个参数是可选的,即使不传id也不会导致页面无法访问
name: 'detail',
component: Detail
// 列表中跳转
this.$router.push({
在
路由传参时,
刷新会失去参数,最后使用query传参的方式使参数不
丢失,也可以通过储存在sessionStorage中解决。
1.例如我想查看文章,在点击文章后,我们就需要将文章相关的内容通过路由传入具体文章的模板中,这时候我们要使用query传参才能让文章在
刷新后不会消失。
2.文章点击后触发函数跳转路由
//item就是要传入的参数
<div @click="toArticel(item)"></div>
3.通过push
方法跳转到articleDetail,并传入三个参数
vue路由传参的三种方式以及页面刷新参数丢失问题一、路由传参的三种方式1、传参方式一:params传参2、传参方式二:路由属性配置传参3、传参方式三:query传参二、三种传递方式的区别
一、路由传参的三种方式
1、传参方式一:params传参
这种方式页面刷新参数丢失。
(1)、参数传递页面:
// 点击跳转详情页面
toDetail(){
this.$router.push({
name:"AntMemu",//值是在配置路由规则时
使用 vue-router 访问同一路由并刷新页面可以使用 $router.go() 或 $router.replace() 方法。
$router.go() 方法可以跳转到历史记录中的特定偏移量,负数表示后退,正数表示前进。
$router.replace() 方法可以替换当前路由记录,不会留下历史记录。
this.$router.go(0)
this.$router.replace({path: '/same-route'})
如果您想在访问同一路由时重新渲染组件,可以使用key属性
<router-view :key="$route.fullPath"></router-view>
这样就能在访问同一路由时重新渲染组件了。
git ------ fatal: No configured push destination. Either specify the URL from the command-line or co
32001