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 相关文章推荐
Uglifyjs(JS代码优化工具)入门 安装使用
Apr 13 Javascript
为jquery的ajaxfileupload增加附加参数的方法
Mar 04 Javascript
jQuery CSS()方法改变现有的CSS样式表
Sep 09 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
Jan 13 Javascript
如何防止INPUT按回车自动提交表单FORM
Dec 06 Javascript
浅谈JavaScript异步编程
Jan 20 Javascript
VUE使用vuex解决模块间传值问题的方法
Jun 01 Javascript
react-native动态切换tab组件的方法
Jul 07 Javascript
Vue实现底部侧边工具栏的实例代码
Sep 03 Javascript
Vue指令指令大全
Feb 09 Javascript
小程序云开发实现数据库异步操作同步化
May 18 Javascript
Vue 权限控制的两种方法(路由验证)
Aug 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
留言板翻页的实现详解
2006/10/09 PHP
php array_intersect()函数使用代码
2009/01/14 PHP
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
PHP连接sftp并下载文件的方法教程
2018/08/26 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
js常用函数 不错
2006/09/08 Javascript
javascript获取URL参数与参数值的示例代码
2013/12/20 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
jQuery+AJAX实现无刷新下拉加载更多
2015/07/03 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
2016/11/09 Javascript
js实现三级联动效果(简单易懂)
2017/03/27 Javascript
node文字生成图片的示例代码
2017/10/26 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
解决vue js IOS H5focus无法自动弹出键盘的问题
2018/08/30 Javascript
python实现哈希表
2014/02/07 Python
python基于mysql实现的简单队列以及跨进程锁实例详解
2014/07/07 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
Python提取频域特征知识点浅析
2019/03/04 Python
对Python中TKinter模块中的Label组件实例详解
2019/06/14 Python
Django ORM多对多查询方法(自定义第三张表&amp;ManyToManyField)
2019/08/09 Python
python离线安装外部依赖包的实现
2020/02/13 Python
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
多媒体编辑专业毕业生推荐信
2013/11/05 职场文书
青年教师典范事迹材料
2014/01/31 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
法英专业大学生职业生涯规划书范文
2014/09/22 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
花木兰观后感
2015/06/10 职场文书
2016特色励志班级口号
2015/12/24 职场文书
Pytest中skip skipif跳过用例详解
2021/06/30 Python
JS 基本概念详细介绍
2021/10/16 Javascript