vue组件传值的实现方式小结【三种方式】


Posted in Javascript onFebruary 05, 2020

本文实例讲述了vue组件传值的实现方式。分享给大家供大家参考,具体如下:

前言

vue的组件传值分为三种方式:父传子、子传父、非父子组件传值

引用官网的一句话:父子组件的关系可以总结为 prop 向下传递,事件向上传递

父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息,如下图所示:

vue组件传值的实现方式小结【三种方式】

下面我们就开始用代码(一言不合就上代码)详细的介绍vue组件传值的三种方式

1、父传子

子组件的代码:

<template>
  <div id="container">
    {{msg}}
  </div>
</template>
<script>
export default {
 data() {
  return {};
 },
 props:{
  msg: String
 }
};
</script>
<style scoped>
#container{
  color: red;
  margin-top: 50px;
}
</style>

父组件的代码:

<template>
  <div id="container">
    <input type="text" v-model="text" @change="dataChange">
    <Child :msg="text"></Child>
  </div>
</template>
<script>
import Child from "@/components/Child";
export default {
 data() {
  return {
   text: "父组件的值"
  };
 },
 methods: {
  dataChange(data){
    this.msg = data
  }
 },
 components: {
  Child
 }
};
</script>
<style scoped>
</style>

父传子的实现方式就是通过props属性,子组件通过props属性接收从父组件传过来的值,而父组件传值的时候使用 v-bind 将子组件中预留的变量名绑定为data里面的数据即可

2、子传父

子组件代码:

<template>
  <div id="container">
    <input type="text" v-model="msg">
    <button @click="setData">传递到父组件</button>
  </div>
</template>
<script>
export default {
 data() {
  return {
   msg: "传递给父组件的值"
  };
 },
 methods: {
  setData() {
   this.$emit("getData", this.msg);
  }
 }
};
</script>
<style scoped>
#container {
 color: red;
 margin-top: 50px;
}
</style>

父组件代码:

<template>
  <div id="container">
    <Child @getData="getData"></Child>
    <p>{{msg}}</p>
  </div>
</template>
<script>
import Child from "@/components/Child";
export default {
 data() {
  return {
   msg: "父组件默认值"
  };
 },
 methods: {
  getData(data) {
   this.msg = data;
  }
 },
 components: {
  Child
 }
};
</script>
<style scoped>
</style>

子传父的实现方式就是用了 this.$emit 来遍历 getData 事件,首先用按钮来触发 setData 事件,在 setData 中 用 this.$emit 来遍历 getData 事件,最后返回 this.msg

总结:

  • 子组件中需要以某种方式例如点击事件的方法来触发一个自定义事件
  • 将需要传的值作为$emit的第二个参数,该值将作为实参传给响应自定义事件的方法
  • 在父组件中注册子组件并在子组件标签上绑定对自定义事件的监听

3、非父子

vue 中没有直接子对子传参的方法,建议将需要传递数据的子组件,都合并为一个组件

如果一定需要子对子传参,可以先从传到父组件,再传到子组件(相当于一个公共bus文件)

为了便于开发,vue 推出了一个状态管理工具 vuex,可以很方便实现组件之间的参数传递

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
javascript 进度条 实现代码
Jul 30 Javascript
jQuery 连续列表实现代码
Dec 21 Javascript
js中浮点型运算BUG的解决方法说明
Jan 06 Javascript
Javascript基础教程之变量
Jan 18 Javascript
jQuery实现的仿百度分页足迹效果代码
Oct 30 Javascript
jQuery遍历json的方法分析
Apr 16 Javascript
微信小程序开发探究
Dec 27 Javascript
微信小程序 简单教程实例详解
Jan 13 Javascript
Vue2.0组件间数据传递示例
Mar 07 Javascript
angularjs中的$eval方法详解
Apr 24 Javascript
Angular4学习笔记之实现绑定和分包
Aug 01 Javascript
JS文件中加载jquery.js的实例代码
May 05 jQuery
vue路由传参的基本实现方式小结【三种方式】
Feb 05 #Javascript
Vuex的API文档说明详解
Feb 05 #Javascript
如何实现iframe父子传参通信
Feb 05 #Javascript
JavaScript对象原型链原理详解
Feb 05 #Javascript
基于Vue的侧边目录组件的实现
Feb 05 #Javascript
Js视频播放器插件Video.js使用方法详解
Feb 04 #Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
Feb 04 #jQuery
You might like
五款PHP代码重构工具推荐
2014/10/14 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
checkbox勾选判断代码分析
2014/06/11 Javascript
一个js过滤空格的小函数
2014/10/10 Javascript
js+css实现导航效果实例
2015/02/10 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
JavaScript必知必会(三) String .的方法来自何方
2016/06/08 Javascript
DIV+CSS+jQ实现省市联动可扩展
2016/06/22 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
vue使用$emit时,父组件无法监听到子组件的事件实例
2018/02/26 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
2018/05/01 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
Python的socket模块源码中的一些实现要点分析
2016/06/06 Python
python 接口返回的json字符串实例
2018/03/27 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
python删除某个目录文件夹的方法
2020/05/26 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
国际政治个人自荐信范文
2013/11/26 职场文书
幼儿园运动会口号
2014/06/07 职场文书
教师民族团结演讲稿
2014/08/27 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
创业计划书之面包店
2019/09/17 职场文书