vue.js几种不同页面(组件)间传值的方式

本文介绍了Vue.js页面传参的几种方式。一是路由传值,使用params传值刷新页面参数会消失,query则不会,<router-link>标签也可传参,但url会变长且非路由跳转界面无法使用;二是用$parent、$children等方法调取层级组件数据和方法,较灵活但耦合性强;三是通过eventBus传递数据,需全局定义并在组件中发送和接收。

1. 路由传值

    在跳转页面的时候,在js代码中的操作如下。

   传参页面:

this.$router.push({
						name: 'originality',
						query: {
							parm: selectMainPicUrl
						}
					});

       需要注意的是,实用params去传值的时候,在页面刷新时,参数会消失,用query则不会有这个问题。

或者在标签中使用<router-link>标签

<router-link 
    :to="{
        path: 'yourPath', 
        params: { 
            name: 'name', 
            dataObj: data
        },
        query: {
            name: 'name', 
            dataObj: data
        }
    }">
</router-link>

  接收参数的页面:

var str = this.$route.query.parm;

这样使用起来很方便,但url会变得很长,而且如果不是使用路由跳转的界面无法使用。

2. $parent,$chlidren等方法调取用层级关系的组件内的数据和方法

this.$parent.$data.id  //获取父元素data中的id
this.$children.$data.id  //获取父元素data中的id

这样用起来比较灵活,但是容易造成代码耦合性太强,导致维护困难

3. 通过eventBus传递数据

使用前可以在全局定义一个eventBus

window.eventBus = new Vue();

在需要传递参数的组件中,定义一个emit发送需要传递的值,键名可以自己定义(可以为对象)

eventBus.$emit('eventBusName', id);

在需要接受参数的组件重,用on接受该值(或对象)

//val即为传递过来的值
eventBus.$on('eventBusName', function(val) {
    console.log(val)
})

最后记住要在beforeDestroy()中关闭这个eventBus

eventBus.$off('eventBusName');

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值