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 相关文章推荐
showModelessDialog()使用详解
Sep 21 Javascript
jquery 插件实现图片延迟加载效果代码
Feb 06 Javascript
JavaScript中的数值范围介绍
Dec 29 Javascript
angularJS 如何读写缓冲的方法(推荐)
Aug 06 Javascript
jQuery利用sort对DOM元素进行排序操作
Nov 07 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
Jan 05 Javascript
React Router基础使用
Jan 17 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
Jan 22 Javascript
详解JavaScript中的Object.is()与&quot;===&quot;运算符总结
Jun 17 Javascript
JS如何生成动态列表
Sep 22 Javascript
解决removeEventListener 无法清除监听的问题
Oct 30 Javascript
JavaScript 事件捕获冒泡与捕获详情
Nov 11 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解决高并发的优化方案实例
2020/12/10 PHP
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
jquery tab标签页的制作
2010/05/10 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
javascript 常见功能汇总
2015/06/11 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
基于JavaScript实现带缩略图的轮播效果
2017/01/12 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
微信小程序实现顶部导航特效
2019/01/28 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
2020/09/28 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
详解JavaScript中的链式调用
2020/11/27 Javascript
javascript实现点击产生随机图形
2021/01/25 Javascript
Python迭代器和生成器介绍
2015/03/06 Python
python如何获取服务器硬件信息
2017/05/11 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
使用pandas中的DataFrame数据绘制柱状图的方法
2018/04/10 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
详解python-图像处理(映射变换)
2019/03/22 Python
python进阶之自定义可迭代的类
2019/08/20 Python
python创建n行m列数组示例
2019/12/02 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
基于python实现对文件进行切分行
2020/04/26 Python
大学生实习证明范本
2014/01/15 职场文书
分家协议书
2014/04/21 职场文书
反腐倡廉演讲稿
2014/05/22 职场文书
放射科岗位职责
2015/02/14 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫