Vue 子组件与数据传递问题及注意事项


Posted in Javascript onJuly 11, 2019

在面对单个组件逻辑复杂需要拆分时,难免会遇到父子组件之间数据传递的问题。那么我们来了解一下在父子组件之间进行数据传递时需要遵循哪些约定,以及要注意哪些问题。

如何传递

父组件向子组件在进行传递时,使用的是 prop 特性进行传递。

约定

老规矩, 在使用前我们首先了解应该怎么使用,有哪些约束条件:

  • 子组件的 props 中定义要传递的变量名
  • 变量名同组件的命名规范
  • 父组件传值时,需要使用 短横线分隔命名
  • 使用 v-bind 进行传值

定义

首先在子组件中定义:

// Child.vue

export default {
  name: 'child'
  props: ['teamList']
}

这里使用了 驼峰命名 ,在传值时需注意要转换成 短横线分隔命名 。

我们定义了一个 teamList 的变量,此时我们就可以在这个组件中通过 this 使用这个变量了(同 data 中的数据)。

传值

在父组件中进行传值:

<template>
  <div>
    <child v-bind:teamList="teamList"></child>
  </div>
</template>

父组件中使用 v-bind 即可将数据传递下去了。

向子组件传递数据就是这么简单,本质上和 data 一样,只是这里单独使用 prop 特性将其区分开来。

需要注意的时:

通过 prop 特性传递下去的数组是 “单向”绑定的,父组件对数组的更新会影响到子组件。因此并不建议子组件对 prop 特性中的值进行修改

Js中在传递对象和数组时传递的时引用!因此:当子组件修改父组件传递下来的对象/数组时会影响到父组件中的状态

这个特性有利有弊,在某些情况下可以通过这种类似 hack 的方式来进行处理。

子组件反向传递

上面说到了,并不建议在子组件中修改 props 中的数据。那么当需要向父组件进行某种 反馈 时怎么办呢?

假设现在我们有一个登录弹出框的组件,通过子组件的方式调用了,当我们登录成功时该如何 通知 父组件做出相应的反应呢?

  1. 通过自定义事件,子组件调用 this.$emit('事件名', 参数)
  2. 使用 v-model 、组件中 model 选项与 input 事件模拟成 input 控件,对父组件中的值进行更新
  3. .sync 修饰符进行 “双向绑定”

这里只介绍第一种方式,因为后两种方式若羽也没用过几次 o(?□?)o

emit使用约定

  • 事件名的命名规范同组件
  • 父组件在绑定子组件上的自定义事件时,必须 完全匹配 事件名,这里不像组件与子组件中使用时是使用的 短横线分隔命名 ,而是 完全匹配 。

约定较少,主要注意使用时是和组件不同的,名称需要完全匹配。

emit使用

首先我们在子组件中定义事件,说是定义,不如说是调用。因为是子组件直接在某段逻辑中调用的 emit :

// child.vue

export default {
  methods: {
    submit() {
      this.$emit('submitForm', this.data)
    }
  }
}

这里我们定义了调用的自定义事件名称为 submitForm ,那么在父组件中使用:

<!-- parent.vue -->

<template>
  <div>
    <child v-on:submitForm="submit"></child>
  </div>
</template>
<script>
export default {
  methods: {
    submit(data) {
      // 处理逻辑
    }
  }
}
</script>

可以看到这里在使用时, v-on 绑定的事件名称是 submitForm 而不是 submit-form 。

这一点需要注意。

写在后面

以上所述是小编给大家介绍的Vue 子组件与数据传递问题及注意事项 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
一个JavaScript继承的实现
Oct 24 Javascript
Javascript 事件流和事件绑定
Jul 16 Javascript
用Greasemonkey 脚本收藏网站会员信息到本地
Oct 26 Javascript
javascript冒泡排序小结
Apr 10 Javascript
浅谈Javascript中的12种DOM节点类型
Aug 19 Javascript
Vue方法与事件处理器详解
Dec 01 Javascript
Smartour 让网页导览变得更简单(推荐)
Jul 19 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
Sep 17 Javascript
微信小程序利用云函数获取手机号码
Dec 17 Javascript
简单了解JS打开url的方法
Feb 21 Javascript
浅析我对JS延迟异步脚本的思考
Oct 12 Javascript
Vue实现下拉加载更多
May 09 Vue.js
ES6的异步终极解决方案分享
Jul 11 #Javascript
微信小程序的开发范式BeautyWe.js入门详解
Jul 10 #Javascript
实现一个 Vue 吸顶锚点组件方法
Jul 10 #Javascript
vue webpack重写cookie路径的方法
Jul 10 #Javascript
vue登录页面cookie的使用及页面跳转代码
Jul 10 #Javascript
Laravel admin实现消息提醒、播放音频功能
Jul 10 #Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
Jul 10 #Javascript
You might like
file_get_contents获取不到网页内容的解决方法
2013/03/07 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
PHP利用header跳转失效的解决方法
2014/10/24 PHP
php include类文件超时问题处理
2015/02/06 PHP
javascript与CSS复习(二)
2010/06/29 Javascript
js读取本地excel文档数据的代码
2010/11/11 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
JS调用CS里的带参方法实例
2013/08/01 Javascript
jQuery判断复选框是否勾选的原理及示例
2014/05/21 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
js格式化时间小结
2014/11/03 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python基于回溯法解决01背包问题实例
2017/12/06 Python
通过Python 获取Android设备信息的轻量级框架
2017/12/18 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
Python寻找两个有序数组的中位数实例详解
2018/12/05 Python
python面向对象入门教程之从代码复用开始(一)
2018/12/11 Python
浅谈Python基础—判断和循环
2019/03/22 Python
利用python开发app实战的方法
2019/07/09 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
迪梵英国官方网站:Darphin英国
2017/12/06 全球购物
WiFi云数码相框:Nixplay
2018/07/05 全球购物
《绿色蝈蝈》教学反思
2014/03/02 职场文书
房务中心文员岗位职责
2014/04/16 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
python3实现无权最短路径的方法
2021/05/12 Python
教你怎么用python selenium实现自动化测试
2021/05/27 Python
《堡垒之夜》联动《刺客信条》 4月7日正式上线
2022/04/06 其他游戏