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 相关文章推荐
jquery实现盒子下拉效果示例代码
Sep 12 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
Jan 02 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
May 24 Javascript
基于JavaScript实现选项卡效果
Jul 21 Javascript
AngularJS遍历获取数组元素的方法示例
Nov 11 Javascript
vue组件中使用props传递数据的实例详解
Apr 08 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
Mar 04 Javascript
layui表格分页 记录勾选的实例
Sep 02 Javascript
vue-resourc发起异步请求的方法
Feb 11 Javascript
微信小程序报错: thirdScriptError的错误问题
Jun 19 Javascript
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
Vue vee-validate插件的简单使用
Jun 22 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
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
允许phpmyadmin空密码登录的配置方法
2011/05/29 PHP
解决CodeIgniter伪静态失效
2014/06/09 PHP
php计算指定目录下文件占用空间的方法
2015/03/13 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
iis6手工创建网站后无法运行php脚本的解决方法
2017/06/08 PHP
使用XHProf查找PHP性能瓶颈的实例
2017/12/13 PHP
javascript学习笔记(五) Array 数组类型介绍
2012/06/19 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
js中关于一个分号的崩溃示例
2013/11/11 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
利用JS实现数字增长
2016/07/28 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
解决vue中无法动态修改jqgrid组件 url地址的问题
2018/03/01 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
举例讲解Python中装饰器的用法
2015/04/27 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
python使用matplotlib画柱状图、散点图
2019/03/18 Python
元组列表字典(莫烦python基础)
2019/04/03 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
h5封装下拉刷新
2020/08/25 HTML / CSS
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
超级搞笑检讨书
2014/01/15 职场文书
快餐店的创业计划书范文
2014/01/29 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
应急处置方案
2014/06/16 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android