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 dialog 异步调用ashx,webservice数据的代码
Aug 03 Javascript
入门基础学习 ExtJS笔记(一)
Nov 11 Javascript
jQuery中append、insertBefore、after与insertAfter的简单用法与注意事项
Apr 04 Javascript
javascript中arguments,callee,caller详解
Mar 16 Javascript
Bootstrap中的Panel和Table全面解析
Jun 13 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
Nov 16 Javascript
AngularJS 控制器 controller的详解
Oct 17 Javascript
Vue render深入开发讲解
Apr 13 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
Oct 30 Javascript
node.js中express模块创建服务器和http模块客户端发请求
Mar 06 Javascript
一次微信小程序内地图的使用实战记录
Sep 09 Javascript
BootstrapValidator实现表单验证功能
Nov 08 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
为php4加入动态flash文件的生成的支持
2006/10/09 PHP
简单的PHP留言本实例代码
2010/05/09 PHP
让PHP COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
php获取参数的几种方法总结
2014/02/18 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
分析 JavaScript 中令人困惑的变量赋值
2007/08/13 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
几种经典排序算法的JS实现方法
2016/03/25 Javascript
彻底理解js面向对象之继承
2018/02/04 Javascript
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
通过实践编写优雅的JavaScript代码
2019/05/30 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
使用nodejs实现JSON文件自动转Excel的工具(推荐)
2020/06/24 NodeJs
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
学习 Vue.js 遇到的那些坑
2021/02/02 Vue.js
python sys模块sys.path使用方法示例
2013/12/04 Python
零基础写python爬虫之抓取糗事百科代码分享
2014/11/06 Python
Python中函数参数匹配模型详解
2019/06/09 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
Python中bisect的使用方法
2019/12/31 Python
为什么称python为胶水语言
2020/06/16 Python
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
Ratchet 模态框的实现
2020/08/19 HTML / CSS
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
儿科护士自我鉴定
2013/10/14 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
Python学习之迭代器详解
2022/04/01 Python
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python