vue页面跳转和参数传递

我的博客:可直接复制代码icon-default.png?t=O83Ahttps://lstar.top/detail?id=b433624326b944c8b3dc698ee298814f 

目标:两种方式,实现vue组件间跳转和参数传递

一、路由方式

页面跳转

  • 当前组件使用$.router.push,通过参数name对应路由中目标组件的name实现跳转

参数传递

  • 传值:当前组件使用$.router.push,通过参数query对应路由里目标组件props中的route.query
  • 接参:目标组件script中使用$.router.query接收参数,页面中直接写参数名

(方法不唯一,还有其他方式)

1. 路由

const router = new Router({
	routes: [{
		path: '/list',
		name: 'List',
		component: () => import('@/components/demo2/List.vue')
	},{
		path: '/detail',
		name: 'Detail',
		component: () => import('@/components/demo2/Detail.vue'),
		props: route => ({param: route.query.param})
	}]
})

2. 列表页面

<template>
	<div>
		<h1>列表页面</h1>
		<div>
			<el-button type="primary" @click="toDetail">点击跳转详情</el-button>
		</div>
	</div>
</template>

<script>
	export default {
		name: "List",
		data() {
			return {
				myId: "123"
			};
		},
		methods: {
			toDetail() {
				this.$router.push({
					name: 'Detail',
					query: {param: this.myId}
				})
			}
		}
	}
</script>

3. 详情页面

<template>
	<div>
		<h1>详情页面</h1>
		<div>
			<el-button type="primary" @click="toList">点击返回列表</el-button>
			<div>传递参数:{{myId}}</div>
		</div>
	</div>
</template>

<script>
	export default {
		name: "Detail",
		data() {
			return {
				myId : this.$route.query.param
			};
		},
		methods:{
			toList(){
				this.$router.push({
					name: 'List',
				})
			}
		}
	}
</script>

二、组件方式

只需配置一个路由即可实现不同页面跳转,页面跳转和参数传递通过组件间调用实现

页面跳转

  • 父组件 → 子组件
    • 引用子组件,利用v-if标签分别选择显示对应组件
  • 子组件 → 父组件
    • ​​​​​​​子组件使用$.emit(事件)调用父组件方法改变自定义参数(show)实现跳转

参数传递

  • 父组件 → 子组件
    • 传值:父组件引用子组件标签(<my-detail :id="父组件参数"></my-detail>)中传递参数
    • 接参:子组件接收参数使用props:['id']
  • 子组件 → 父组件
    • 传值:子组件使用$.emit(父组件方法,参数)传递参数
    • 接参:父组件通过方法名(参数)接收

1. 路由

const router = new Router({
	routes: [{
		path: '/main',
		name: 'Main',
		component: () => import('@/components/demo1/Main.vue')
	}]
})

2. 主页组件

<template>
	<div>
		<h1>主页面</h1>
		<my-list v-if="show == 'list'" @toDetail="toDetail"></my-list>
		
		<my-detail v-if="show == 'detail'" @toList="toList" :myId="myId"></my-detail>
	</div>
</template>

<script>
	import MyList from "@/components/demo1/MyList"
	import MyDetail from "@/components/demo1/MyDetail"
	
	export default {
		name: "Main",
		components: {
			MyList,
			MyDetail
		},
		data() {
			return {
				show: "list",
				myId: ""
			};
		},
		methods:{
			toDetail(data){
				this.show = "detail"
				this.myId = data
			},
			toList(){
				this.show = "list"
			}
		}
	}
</script>

3. 列表子组件

<template>
	<div>
		<h2>列表页面</h2>
		<div>
			<el-button type="primary" @click="toDetail">点击跳转详情</el-button>
		</div>
	</div>
</template>

<script>
	export default {
		name: "MyList",
		data() {
			return {
				myId: "123"
			};
		},
		methods: {
			toDetail(data) {
				this.$emit("toDetail",this.myId)
			}
		}
	}
</script>

4. 详情子组件

<template>
	<div>
		<h2>详情页面</h2>
		<div>
			<el-button type="primary" @click="toList">点击返回列表</el-button>
			<div>传递参数:{{myId}}</div>
		</div>
	</div>
</template>

<script>
	export default {
		name: "MyDetail",
		props:['myId'],
		data() {
			return {
			};
		},
		methods:{
			toList(){
				this.$emit("toList")
			}
		}
	}
</script>

【源码见个人空间资源板块】


原创不易,转载请注明来源

<think>嗯,用户想了解在Vue页面跳转时如何传递参数。我之前处理过类似的问题,记得Vue Router有几种不同的传参方法。首先,我需要回忆一下具体的实现方式,并确保示例代码正确。 用户可能需要基础的传参方法,比如使用params或query。记得params需要路由配置中的动态路径参数配合,而query则直接在URL中添加参数。另外,props属性也是一个方式,可以通过路由配置将参数作为props传递给组件。还有状态管理,比如Vuex,适合传递复杂或敏感的数据,不暴露在URL中。 得注意不同的方法之间的区别,比如paramsquery在URL中的表现,以及如何在后端配置路由。比如,使用params时,路由路径需要定义参数,比如`path: '/user/:id'`,而query则不需要。同时,使用props可以让组件更解耦,直接从props获取参数而不是依赖$route对象。 另外,用户可能关心这些方法的适用场景。例如,params适合传递必要标识符,而query适合可选参数Vuex适合跨多个组件共享数据,或者传递大量数据时使用。 需要检查示例代码是否正确,比如使用router-link时,to属性如何结构,对象写法需要v-bind。编程式导航中,this.$router.push的参数是否正确,比如使用name还是path,以及paramsquery的位置。 还要考虑用户可能的疑问,比如页面刷新后params参数是否会丢失,这取决于是否在路由配置了动态参数。如果使用params但没有对应的路由路径,刷新后参数会丢失,而query参数因为存在URL中则不会。 此外,动态路由参数props的结合使用,是否需要在组件中声明props,以及如何处理类型检查。比如在目标组件中定义props来接收参数,这样可以提高组件的可复用性。 最后,应该提醒用户不同方法的注意事项,比如params需要命名路由,Vuex需要安装配置,确保用户根据具体情况选择合适的方法。同时,给出相关的问题,帮助用户深入理解不同方法的差异应用场景。</think>在Vue中实现页面跳转传参有5种常用方法,以下从基础到进阶逐步说明: ### 一、路由参数(params)传递 ```javascript // 路由配置 { path: '/user/:id', name: 'User', component: User } // 发送参数 this.$router.push({ name: 'User', params: { id: 123 } }) // 接收参数(User组件) this.$route.params.id ``` **特点**:参数不显示在URL地址栏[^1] ### 二、查询参数(query)传递 ```javascript // 发送参数 this.$router.push({ path: '/search', query: { keyword: 'vue' } }) // 接收参数 this.$route.query.keyword ``` **特点**:参数显示为`?keyword=vue`的URL格式[^2] ### 三、Props解耦传参(推荐) ```javascript // 路由配置 { path: '/product/:pid', component: Product, props: true } // 组件接收 export default { props: ['pid'] } ``` **优势**:组件不依赖$route对象,提高可复用性 ### 四、路由元信息(meta) ```javascript // 路由配置 { path: '/admin', meta: { requiresAuth: true } } // 访问控制 router.beforeEach((to, from, next) => { if (to.meta.requiresAuth && !isLoggedIn()) { next('/login') } }) ``` ### 五、Vuex状态管理 ```javascript // store定义 const store = new Vuex.Store({ state: { userInfo: null } }) // 发送参数 store.commit('SET_USER', userData) // 接收参数 computed: { user() { return this.$store.state.userInfo } } ``` **适用场景**:跨多组件共享数据或敏感信息传递 ### 注意事项对比表 | 方法 | URL可见性 | 刷新保留 | 数据量限制 | |------------|----------|---------|----------| | params | 不可见 | 需动态路由 | 中 | | query | 可见 | 保留 | 较小 | | props | 可选 | 同params | 中 | | Vuex | 不可见 | 不保留 | 大 |
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值