首页 > 编程知识 正文

vue组件属性传递数组,vue组件与组件之间传值

时间:2023-05-06 10:02:05 阅读:266643 作者:2390

概述

vue作为现在前端使用的主流框架之一,组件一直是vue的核心部分。起初,我在学习vue的过程中接触到了组件之间传值的功能,但是由于在工作中使用较少,对于这一部分没有深入的认识,导致在开发过程中遇到了一些问题,通过进一步的学习,我了解到了vue组件传值的方式以及存在两类不同的组件传值方式:同级组件之间的传值、父子组件之间的传值。

同级组件之间的传值

由于vue框架本身不支持同级之间组件的跳转,所以想要实现同级组件之间的跳转并且传值,需要先引入vue-router.js路由组件,使用路由的一大好处就是可以将所有功能组件化,实现单页面应用。既然说到单页面应用,这里推荐一个前端后台方案vue-element-admin,这里不做过多讲解了。

目前我是用比较多的方法是通过this.$router.push({})进行路由跳转。在使用这个方法进行跳转的时候,可以选择两种方式进行参数传递,分别是query方法和params方法。

使用param传参只能使用name进行引入,并且params一旦设置在路由,params就是路由的一部分,如果这个路由有params传参,但是在跳转的时候没有传这个参数,会导致跳转失败或者页面会没有内容。

params传递数据:

toEdit(){ this.$router.push({ name:'resourcesCourseEidt', params:{ info:'1' } }) },

param接收数据:

var info = this.$router.params.info

使用query方式可以通过path和name来进入路由,并且可以不进行传参。

query方法传递数据:

​ toEdit(){ this.$router.push({ path:'/resourcesCourseEidt', query:{ info:'1' } }) },​

query方法接收数据:

​var info = this.$router.query.info

总结:使用query和params来传递参数还是有不同的,query类似于get请求,在路由跳转的时候会在地址后面添加上组件之间传递的参数;而params类似于post方法相当于post请求,参数不会显示在地址栏,但是必须传递参数。

父子组件之间的传值

在vue中,除了同级组件之外,还存在着另一种组件关系,那就是父子组件。父子组件之间的传值不能在使用this.$router.push({})方法,而vue框架本身给出了一种传值方法,那就是在父组件引入的子组件标签内,绑定上需要传递的参数,然后子组件被调用的时候对这些参数进行接收。

在父组件中引入子组件:

import upload from './components/upload'

在父组件中的子组件标签绑定传递的参数值:

<upload v-model="uploadShow" :entity="chooseEntity" :actionUrl="actionUrl" :domain="domain" :token="postData.token" :name="postData.key" @change="handleChange()"></upload>

  在子组件中接收参数,其中type表示父组件传递过来的参数是什么种类:

props:{ entity: { type: Object }, actionUrl:{ type:String }, domain:{ type:String }, token:{ type:String }, name:{ type:String } },

其实到了这一步,我们就可以使用父组件传递给子组件的数据了,这些数据和我们在子组件data中生命的一样,直接使用就可以了。但是还存在一种情况,就是这些数据每次父组件传递给子组件时都可能会变化,并且子组件需要操作这些数据,对这些数据进行修改,在这样的情况下,子组件是不能直接对父组件传递来的数据进行修改的,而要通过监听这些数据的变化,将这些数据保存在子组件自己的data中,然后进行数据修改。

watch:{ name(newKey){ this.postData.token = this.token this.postData.key = newKey } },

这里的例子是在使用七牛云的过程中,需要拿到token以及需要传递自定义文件名称key,并且这些数据要放在postData中。其中token是负组件中通过调用后台接口从数据库中获取的,这个参数是一个不会改变的静态参数,所以我们直接拿来使用就可以了;而key值是动态数据,每次上传文件时都会产生变化,所以在watch中监听这个数据的变化,如果数据产生变化,就将父组件中传递过来的“name”(其实放的就是key值)赋给子组件中postData中的key,这样就实现了子组件对父组件传递过来的数据进行动态监听了。

在这里我产生了一个误区,在写总给的时候忽然想到,其实我不必使用watch进行监听,可以在上传组件调用上传文件前的钩子时对token和key进行赋值。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。