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对象的支持
Jul 25 Javascript
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
Jul 24 Javascript
今天是星期几的4种JS代码写法
Sep 17 Javascript
jQuery中parentsUntil()方法用法实例
Jan 07 Javascript
Javascript基础教程之比较操作符
Jan 18 Javascript
javascript实现跨域的方法汇总
Jun 25 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
Jun 26 Javascript
JavaScript  cookie 跨域访问之广告推广
Apr 20 Javascript
响应式框架Bootstrap栅格系统的实例
Dec 19 Javascript
Webpack中雪碧图插件使用详解
May 25 Javascript
angular 组件通信的几种实现方式
Jul 13 Javascript
js实现数字滚动特效
Dec 16 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代码
2013/11/19 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
Javascript面向对象之四 继承
2011/02/08 Javascript
Javascript操作cookie的函数代码
2012/10/03 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
使用Bootstrap打造特色进度条效果
2017/05/02 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
Python中使用中文的方法
2011/02/19 Python
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
python+flask实现API的方法
2018/11/21 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
python定时检测无响应进程并重启的实例代码
2019/04/22 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
特色冷饮店创业计划书
2014/01/28 职场文书
承诺书的格式范文
2014/03/28 职场文书
单位同意报考证明
2015/06/17 职场文书
SpringBoot使用AOP实现统计全局接口访问次数详解
2022/06/16 Java/Android