Vue.js子组件向父组件通信的方法实例代码详解


Posted in Javascript onDecember 10, 2018

一、场景描述:

曾经有个电商项目,其中有个“老带新”模块,而且该模块新增的入口很多,但是新增后展示效果还不一样,当时就考虑将新增的组件单独拿出来,其实就是一个子组件向父组同步数据的过程。

当然,背景不重要了,关键是看实现的方式。

二、场景展示效果

(PS:展示效果请忽略美感)

Vue.js子组件向父组件通信的方法实例代码详解 

三、如何实现

注意:Vuejs架构通过vue-cli 3.X搭建的项目,版本无所谓。

1、先看下目录体系,下图子组件放在components文件夹内,模拟子组件为itemAdd.vue,父组件视图放在views文件夹内,模拟父组件名称为Home.vue。

Vue.js子组件向父组件通信的方法实例代码详解

2、效果图里面可以看出有两个三个元素:输入框、单选框、和新增按钮。

输入框使用v-model绑定值,方便后边获取到输入框数值; 单选框同样使用v-model绑定值,在新增时,将picked的值同步至父组件; 新增按钮,新增时将表单元素的组件值,操作传递事件;

子组件元素代码:

<template>
 <div class='add_item'>
  <label for="username">用户名:
   <input id='username' v-model='username' type="text" name='name'>
  </label>
  <span>username:{{username}}</span>
  <br />
  <input type="radio" value='男' id='male' v-model='picked'>
  <label for="male">男</label>
  <input type="radio" value='女' id='female' v-model='picked'>
  <label for="female">女</label>
  <span>picked:{{picked}}</span>
  <br />
  <button @click='add_user'>新增</button>
 </div>
</template>

子组件数据、事件均放在script里面:

<script>
export default {
 name: "itemadd",
 data() {
  return {
   username: "",
   picked: '男'
  }
 },
 methods: {
  add_user() {
  	let user={username:this.username,sex:this.picked}
  	this.$emit('adduser',user)
  }
 }
}
</script>

顺便贴下子组件的样式

<style>
.add_item {
 width: 100%;
 background-color: lightblue;
 padding-top: 10px;
 padding-bottom: 10px;
}

.add_item button {
 outline: none;
 border: none;
 width: 200px;
 height: 40px;
 color: white;
 background-color: green;
 border-radius: 10px;
}
</style>

3、父组件在使用子组件时,先获取到子组件,一并在代码里面展示组件事件

父组件的script内,获取子组件、初始列表数据、以及组件数据传递方法,代码有简单说明

<script>
// 获取组件
import itemAdd from '@/components/itemAdd.vue'

export default {
 name: 'home',
 data() {
  return {
   // 设置初始列表值,为展示效果,特意初始一条数据
   userList: [{
    username: "yang",
    sex: "男"
   }]
  }
 },
 methods: {
  //调用子组件时添加数据到父组件数据
  newuser(user) {
   this.userList.push(user)
  }
 },
 //子组件调用
 components: {
  itemAdd
 }
}
</script>

父组件通过v-on,添加事件方法

<template>
 <div class="home">
 	<!-- 子组件调用,并添加时间方法 -->
  <item-add @adduser='newuser'></item-add>
  <ul>
  	<!-- 简单的样式展示 -->
   <li>
    <span>用户名</span>
        
    <span>性别</span>
   </li>
   <li v-for='user in userList' :key='user.id'>
    <span>{{user.username}}</span>
        
    <span>{{user.sex}}</span>
   </li>
  </ul>
 </div>
</template>

按照流程,随便贴下父组件样式

<style scoped>
li {
 list-style: none;
}

li:nth-child(even) {
 background-color: lightgrey;
}
</style>

四、总结:

子组件通过事件向父组件同部数据,上文展示的是通过$emit事件。其实还有v-model、Vuex等方式进行传递数据。

以上所述是小编给大家介绍的Vue.js子组件向父组件通信的方法实例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Javascript操纵Cookie实现购物车程序
Feb 15 Javascript
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
May 18 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
Mar 11 Javascript
jquery 关于event.target使用的几点说明介绍
Apr 26 Javascript
实例详解jQuery表单验证插件validate
Jan 18 Javascript
JS实现的打字机效果完整实例
Jun 20 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
Dec 24 Javascript
微信小程序引用公共js里的方法的实例详解
Aug 17 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
Aug 17 Javascript
使用 vue-i18n 切换中英文效果
May 23 Javascript
angularJs在多个控制器中共享服务数据的方法
Sep 30 Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
Nov 13 Javascript
vue 基于element-ui 分页组件封装的实例代码
Dec 10 #Javascript
JavaScript对象拷贝与赋值操作实例分析
Dec 10 #Javascript
express 项目分层实践详解
Dec 10 #Javascript
JS选取DOM元素常见操作方法实例分析
Dec 10 #Javascript
微信小程序分享海报生成的实现方法
Dec 10 #Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
Dec 10 #jQuery
详解Angular Forms中自定义ngModel绑定值的方式
Dec 10 #Javascript
You might like
十天学会php之第四天
2006/10/09 PHP
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
JavaScript 模拟用户单击事件
2009/12/31 Javascript
JS异常处理的一个想法(sofish)
2013/03/14 Javascript
Jquery submit()无法提交问题
2013/04/21 Javascript
js获取指定日期前后的日期代码
2013/08/20 Javascript
JS将所有对象s的属性复制给对象r(原生js+jquery)
2014/01/25 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
2015/10/16 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
2016/04/28 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
javascript实现滚轮轮播图片
2020/12/13 Javascript
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
selenium3+python3环境搭建教程图解
2018/12/07 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
python3中类的继承以及self和super的区别详解
2019/06/26 Python
500行代码使用python写个微信小游戏飞机大战游戏
2019/10/16 Python
基于Python测试程序是否有错误
2020/05/16 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
写给妈妈的道歉信
2014/01/11 职场文书
益达广告词
2014/03/14 职场文书
2014年党的群众路线整改措施思想汇报
2014/10/12 职场文书
六年级小学生评语
2014/12/26 职场文书
推广普通话的宣传语
2015/07/13 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
小学记事作文之200字
2019/08/06 职场文书