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系列(3) 全面解析Module模式
Jan 15 Javascript
jquery验证手机号码、邮箱格式是否正确示例代码
Jul 28 Javascript
JQuery伸缩导航练习示例
Nov 13 Javascript
使用AOP改善javascript代码
May 01 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
Aug 10 Javascript
jQueryUI Datepicker组件设置日期高亮
Oct 13 Javascript
详解JS中的this、apply、call、bind(经典面试题)
Sep 19 Javascript
在element-ui的select下拉框加上滚动加载
Apr 18 Javascript
Angular4.0动画操作实例详解
May 10 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
Sep 27 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
Jul 21 Javascript
JavaScript实现缓动动画
Nov 25 Javascript
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基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
2016/07/12 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
jquery实现excel导出的方法
2013/04/04 Javascript
jQuery中Dom的基本操作小结
2014/01/23 Javascript
javascript实现详细时间提醒信息效果的方法
2015/03/11 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
18个非常棒的jQuery代码片段
2015/11/02 Javascript
AngularJs表单验证实例详解
2016/05/30 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
2020/07/21 Javascript
js实现缓动动画
2020/11/25 Javascript
vue添加自定义右键菜单的完整实例
2020/12/08 Vue.js
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
python编写网页爬虫脚本并实现APScheduler调度
2014/07/28 Python
用Python编写web API的教程
2015/04/30 Python
Python中格式化format()方法详解
2017/04/01 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
教你使用python实现微信每天给女朋友说晚安
2018/03/23 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
python 二维数组90度旋转的方法
2019/01/28 Python
Python3 修改默认环境的方法
2019/02/16 Python
手机使用python操作图片文件(pydroid3)过程详解
2019/09/25 Python
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
马来西亚最好的婴儿商店:Motherhood
2017/09/14 全球购物
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
介绍一下Mysql的存储引擎
2015/02/12 面试题
学习“七一”讲话精神体会
2014/07/08 职场文书
感情真挚的毕业生求职信
2014/07/19 职场文书
大一新生检讨书
2014/10/29 职场文书
民用住房租房协议书
2014/10/29 职场文书
大学生社会实践感想
2015/08/11 职场文书
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers
Elasticsearch 聚合查询和排序
2022/04/19 Python