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 相关文章推荐
jQuery 研究心得 取得属性的值
Nov 30 Javascript
让AJAX不依赖后端接口实现方案
Dec 03 Javascript
javascript自启动函数的问题探讨
Oct 05 Javascript
JavaScript中的console.profile()函数详细介绍
Dec 29 Javascript
修复bash漏洞的shell脚本分享
Dec 31 Javascript
javascript实现鼠标拖动改变层大小的方法
Apr 30 Javascript
jquery实现的缩略图预览滑块实例
Jun 25 Javascript
JS简单实现浮动窗口效果示例
Sep 07 Javascript
老生常谈JQuery data方法的使用
Sep 09 Javascript
node.js学习笔记之koa框架和简单爬虫练习
Dec 13 Javascript
详解Vue.directive 自定义指令
Mar 27 Javascript
10种JavaScript最常见的错误(小结)
Jun 21 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
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
php 中的str_replace 函数总结
2007/04/27 PHP
PHP生成短网址的3种方法代码实例
2014/07/08 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
Javascript 模式实例 观察者模式
2009/10/24 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
2016/12/18 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
在Vue中使用echarts的方法
2018/02/05 Javascript
js中的数组对象排序分析
2018/12/11 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
Python中使用HTMLParser解析html实例
2015/02/08 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
Python脚本暴力破解栅栏密码
2015/10/19 Python
python实现对excel进行数据剔除操作实例
2017/12/07 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
Python如何将字符串转换为日期
2020/07/31 Python
如何用Python进行时间序列分解和预测
2021/03/01 Python
remote接口和home接口主要作用
2013/05/15 面试题
机械制造与自动化应届生求职信
2013/11/16 职场文书
网络工程师专家职业发展路线
2014/02/14 职场文书
就业意向书范文
2014/04/01 职场文书
应届毕业生自荐书
2014/06/18 职场文书
十佳党员事迹材料
2014/08/28 职场文书
庆七一宣传标语
2014/10/08 职场文书
周年庆典答谢词
2015/01/20 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
MySQL不使用order by实现排名的三种思路总结
2021/06/02 MySQL