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 相关文章推荐
一个js实现的所谓的滑动门
May 23 Javascript
Confirmer JQuery确认对话框组件
Jun 09 Javascript
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
Sep 13 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
May 13 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
Jun 20 Javascript
一个判断抢购时间是否到达的简单的js函数
Jun 23 Javascript
JavaScript事件学习小结(三)js事件对象
Jun 09 Javascript
javascript类型系统——undefined和null全面了解
Jul 13 Javascript
React Router基础使用
Jan 17 Javascript
js实现文字选中分享功能
Jan 25 Javascript
JavaScript制作简易计算器(不用eval)
Feb 05 Javascript
JavaScript实现简单的文本逐字打印效果示例
Apr 12 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
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
PHP实现的简单日历类
2014/11/29 PHP
浅析php-fpm静态和动态执行方式的比较
2016/11/09 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
js模仿jquery的写法示例代码
2013/06/16 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
实现高性能JavaScript之执行与加载
2016/01/30 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
Vue实现6位数密码效果
2018/08/18 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
详解JS浏览器事件循环机制
2019/03/27 Javascript
深入浅析Vue 中 ref 的使用
2019/04/29 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
python实现的重启关机程序实例
2014/08/21 Python
利用Python的Django框架中的ORM建立查询API
2015/04/20 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
2015/12/31 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
python将时分秒转换成秒的实例
2019/12/07 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
美国小蜜蜂Burt’s Bees德国官网:天然唇部、皮肤和身体护理产品
2020/06/14 全球购物
护理专业毕业生推荐信
2013/10/31 职场文书
广告学专业自荐信范文
2014/02/24 职场文书
担保书格式及范文
2014/04/01 职场文书
二年级语文下册复习计划
2015/01/19 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
go结构体嵌套的切片数组操作
2021/04/28 Golang
详解Python牛顿插值法
2021/05/11 Python
vue实现锚点定位功能
2021/06/29 Vue.js