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 相关文章推荐
Mootools 1.2教程 事件处理
Sep 15 Javascript
javascript学习之闭包分析
Dec 02 Javascript
JS调用页面表格导出excel示例代码
Mar 18 Javascript
jQuery中remove()方法用法实例
Dec 25 Javascript
JavaScript实现在页面间传值的方法
Apr 07 Javascript
轻松实现javascript图片轮播特效
Jan 13 Javascript
jQuery CSS3自定义美化Checkbox实现代码
May 12 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
May 17 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
Sep 08 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
Apr 11 Javascript
react路由配置方式详解
Aug 07 Javascript
基于vuex实现购物车功能
Jan 10 Vue.js
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下使用iconv需要注意的问题
2010/11/20 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别
2009/11/12 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
2011/09/02 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
js选项卡的实现方法
2015/02/09 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
jQuery实现的向下图文信息滚动效果
2015/05/03 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
2017/04/12 Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
2018/04/13 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
2020/11/12 Javascript
ubuntu中配置pyqt4环境教程
2017/12/27 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
Django权限设置及验证方式
2020/05/13 Python
浅析Python 多行匹配模式
2020/07/24 Python
Python Selenium自动化获取页面信息的方法
2020/08/31 Python
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
美国益智玩具购物网站:Fat Brain Toys
2017/11/03 全球购物
埃弗顿足球俱乐部官方网上商店:Everton Direct
2018/01/13 全球购物
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
旅游业大学生创业计划书
2014/01/31 职场文书
工作决心书范文
2014/03/11 职场文书
单位租房协议范本
2014/12/03 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
拖欠货款起诉状
2015/05/20 职场文书
英语投诉信范文
2015/07/03 职场文书
详解前端任务构建利器Gulp.js使用指南
2021/04/30 Javascript
Python测试框架pytest高阶用法全面详解
2022/06/01 Python