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 相关文章推荐
一个符号插入器 中用到的js代码
Sep 04 Javascript
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
Dec 19 Javascript
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
Jan 04 Javascript
JavaScript的递归之递归与循环示例介绍
Aug 05 Javascript
IE的事件传递-event.cancelBubble示例介绍
Jan 12 Javascript
Vue2学习笔记之请求数据交互vue-resource
Feb 23 Javascript
js实现常见的工具条效果
Mar 02 Javascript
Bootstrap入门教程一Hello Bootstrap初识
Mar 02 Javascript
Javascript中click与blur事件的顺序详析
Apr 25 Javascript
基于JavaScript实现选项卡效果
Jul 21 Javascript
BootStrap的双日历时间控件使用
Jul 25 Javascript
Vue内部渲染视图的方法
Sep 02 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
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
PHP的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
简单谈谈PHP中的Reload操作
2016/12/12 PHP
Mootools 1.2教程 类(一)
2009/09/15 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
基于jQuery实现淡入淡出效果轮播图
2020/07/31 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
angularjs ui-router中路由的二级嵌套
2017/03/10 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
vue远程加载sfc组件思路详解
2019/12/25 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
使用Python写个小监控
2016/01/27 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
土耳其时尚潮流在线购物网站:Trendyol
2017/10/10 全球购物
Puma印度官网:德国运动品牌
2019/10/06 全球购物
市场营销专业毕业生自荐信
2013/11/02 职场文书
大学生职业生涯规划方案
2014/01/03 职场文书
六一儿童节活动策划方案
2014/01/27 职场文书
会计专业应届生自荐信
2014/02/07 职场文书
幼儿园区域活动总结
2014/05/08 职场文书
网络营销实训总结
2015/08/03 职场文书
导游词之嵊泗列岛
2019/10/30 职场文书
详解Mysql事务并发(脏读、不可重复读、幻读)
2022/04/29 MySQL