vue实现页面跳转和参数传递的两种方式

 更新时间:2023年09月06日 11:17:32   作者:(lS)  
这篇文章主要介绍了vue页面跳转和参数传递的两种方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

目标:两种方式,实现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>

到此这篇关于vue页面跳转和参数传递的文章就介绍到这了,更多相关vue页面跳转和参数传递内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue mounted组件的使用

    vue mounted组件的使用

    这篇文章主要介绍了vue mounted组件的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • vue element-ui el-tooltip组件失效问题及解决

    vue element-ui el-tooltip组件失效问题及解决

    这篇文章主要介绍了vue element-ui el-tooltip组件失效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Vue + Element 自定义上传封面组件功能

    Vue + Element 自定义上传封面组件功能

    这篇文章主要介绍了Vue + Element 自定义上传封面组件,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • Vue.js中extend选项和delimiters选项的比较

    Vue.js中extend选项和delimiters选项的比较

    这篇文章主要介绍了Vue.js中extend选项和delimiters选项的比较的相关资料,需要的朋友可以参考下
    2017-07-07
  • Vue body样式修改方式

    Vue body样式修改方式

    这篇文章主要介绍了Vue body样式修改方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • websocket+Vuex实现一个实时聊天软件

    websocket+Vuex实现一个实时聊天软件

    这篇文章主要利用websocked 建立长连接,利用Vuex全局通信的特性,以及watch,computed函数监听消息变化,并驱动页面变化实现实时聊天,感兴趣的可以了解一下
    2021-08-08
  • vue实现数据控制视图的原理解析

    vue实现数据控制视图的原理解析

    这篇文章主要介绍了vue如何实现的数据控制视图的相关知识,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • ant 菜单组件报错Cannot read property ‘isRootMenu‘ of undefined

    ant 菜单组件报错Cannot read property ‘isRootMenu‘ of undefin

    这篇文章主要介绍了ant 菜单组件报错Cannot read property ‘isRootMenu‘ of undefined解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Vue中实现父子组件双向数据流的三种方案分享

    Vue中实现父子组件双向数据流的三种方案分享

    通常情况下,父子组件的通信都是单向的,或父组件使用props向子组件传递数据,或子组件使用emit函数向父组件传递数据,本文将尝试讲解Vue中常用的几种双向数据流的使用,需要的朋友可以参考下
    2023-08-08
  • 关于Uncaught(in promise)TypeError: list is not iterable报错解决

    关于Uncaught(in promise)TypeError: list is not iterable报错

    这篇文章主要给大家介绍了关于Uncaught(in promise)TypeError: list is not iterable报错的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08

最新评论