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 相关文章推荐
jquery实现控制表格行高亮实例
Jun 05 Javascript
jQuery使用之设置元素样式用法实例
Jan 19 Javascript
JavaScript模拟实现键盘打字效果
Jun 29 Javascript
jquery遍历table的tr获取td的值实现方法
May 19 Javascript
JavaScript使用FileReader实现图片上传预览效果
Mar 27 Javascript
vue axios请求频繁时取消上一次请求的方法
Nov 10 Javascript
使用post方法实现json往返传输数据的方法
Mar 30 Javascript
详解vue-cli3多页应用改造
Jun 04 Javascript
前端插件之Bootstrap Dual Listbox使用教程
Jul 23 Javascript
vue移动端模态框(可传参)的实现
Nov 20 Javascript
jQuery操作元素追加内容示例
Jan 10 jQuery
VUE中的v-if与v-show区别介绍
Mar 13 Vue.js
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正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
解决laravel资源加载路径设置的问题
2019/10/14 PHP
jQuery开发者都需要知道的5个小技巧
2010/01/08 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
2016/05/28 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
vue-cli监听组件加载完成的方法
2018/09/07 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
2020/04/25 Javascript
解决removeEventListener 无法清除监听的问题
2020/10/30 Javascript
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
2018/01/04 Python
Sublime开发python程序的示例代码
2018/01/24 Python
python实现单向链表详解
2018/02/08 Python
django框架基于queryset和双下划线的跨表查询操作详解
2019/12/11 Python
Django密码存储策略分析
2020/01/09 Python
详解python os.path.exists判断文件或文件夹是否存在
2020/11/16 Python
Yahoo-PHP面试题4
2012/05/05 面试题
工程地质勘察专业大学生求职信
2013/10/13 职场文书
怎么写有吸引力的自荐信
2013/11/17 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
财务会计大学生自我评价
2014/04/09 职场文书
无偿献血倡议书
2014/04/14 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
协议书范文
2015/01/27 职场文书
2016幼儿园教师节新闻稿
2015/11/25 职场文书