Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)


Posted in Javascript onAugust 16, 2018

Vue2.0 传值方式:

在Vue的框架开发的项目过程中,经常会用到组件来管理不同的功能,有一些公共的组件会被提取出来。这时必然会产生一些疑问和需求?比如一个组件调用另一个组件作为自己的子组件,那么我们如何进行给子组件进行传值呢?如果是电商网站系统的开发,还会涉及到购物车的选项,这时候就会涉及到非父子组件传值的情况。当然你也可以用Vuex状态管理工具来实现,这部分我们后续会单独介绍。我先给大家介绍Vue开发中常用的三种传值方式。

Vue常用的三种传值方式有:

•父传子

•子传父

•非父子传值

引用官网的一句话:父子组件的关系可以总结为 prop 向下传递,事件向上传递。父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息,如下图所示:

Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)

接下来,我们通过实例来看可能会更明白一些:

1. 父组件向子组件进行传值

Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)

父组件:

<template>
 <div>
  父组件:
  <input type="text" v-model="name">
  <br>
  <br>
  <!-- 引入子组件 -->
  <child :inputName="name"></child>
 </div>
</template>
<script>
 import child from './child'
 export default {
  components: {
   child
  },
  data () {
   return {
    name: ''
   }
  }
 }
</script>

子组件:

<template>
 <div>
  子组件:
  <span>{{inputName}}</span>
 </div>
</template>
<script>
 export default {
  // 接受父组件的值
  props: {
   inputName: String,
   required: true
  }
 }
</script>

2. 子组件向父组件传值

Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)

子组件:

<template>
 <div>
  子组件:
  <span>{{childValue}}</span>
  <!-- 定义一个子组件传值的方法 -->
  <input type="button" value="点击触发" @click="childClick">
 </div>
</template>
<script>
 export default {
  data () {
   return {
    childValue: '我是子组件的数据'
   }
  },
  methods: {
   childClick () {
    // childByValue是在父组件on监听的方法
    // 第二个参数this.childValue是需要传的值
    this.$emit('childByValue', this.childValue)
   }
  }
 }
</script>

父组件:

<template>
 <div>
  父组件:
  <span>{{name}}</span>
  <br>
  <br>
  <!-- 引入子组件 定义一个on的方法监听子组件的状态-->
  <child v-on:childByValue="childByValue"></child>
 </div>
</template>
<script>
 import child from './child'
 export default {
  components: {
   child
  },
  data () {
   return {
    name: ''
   }
  },
  methods: {
   childByValue: function (childValue) {
    // childValue就是子组件传过来的值
    this.name = childValue
   }
  }
 }
</script>

3. 非父子组件进行传值

非父子组件之间传值,需要定义个公共的公共实例文件bus.js,作为中间仓库来传值,不然路由组件之间达不到传值的效果。

公共bus.js

//bus.js
import Vue from 'vue'
export default new Vue()

组件A:

<template>
 <div>
  A组件:
  <span>{{elementValue}}</span>
  <input type="button" value="点击触发" @click="elementByValue">
 </div>
</template>
<script>
 // 引入公共的bug,来做为中间传达的工具
 import Bus from './bus.js'
 export default {
  data () {
   return {
    elementValue: 4
   }
  },
  methods: {
   elementByValue: function () {
    Bus.$emit('val', this.elementValue)
   }
  }
 }
</script>

组件B:

<template>
 <div>
  B组件:
  <input type="button" value="点击触发" @click="getData">
  <span>{{name}}</span>
 </div>
</template>
<script>
 import Bus from './bus.js'
 export default {
  data () {
   return {
    name: 0
   }
  },
  mounted: function () {
   var vm = this
   // 用$on事件来接收参数
   Bus.$on('val', (data) => {
    console.log(data)
    vm.name = data
   })
  },
  methods: {
   getData: function () {
    this.name++
   }
  }
 }
</script>

 总结

以上所述是小编给大家介绍的Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
Apr 01 Javascript
javascript的propertyIsEnumerable()方法使用介绍
Apr 09 Javascript
原生js和jquery分别实现横向导航菜单效果
May 13 Javascript
jQuery获取radio选中项的值实例
Jun 18 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
Oct 18 Javascript
原生js实现日期计算器功能
Feb 17 Javascript
详解在Vue中通过自定义指令获取dom元素
Mar 04 Javascript
基于打包工具Webpack进行项目开发实例
May 29 Javascript
jQuery时间戳和日期相互转换操作示例
Dec 07 jQuery
JavaScript数据结构之栈实例用法
Jan 18 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
Nov 01 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
Sep 27 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
Aug 16 #Javascript
浅谈Vue.js路由管理器 Vue Router
Aug 16 #Javascript
layui问题之模拟select点击事件的实例讲解
Aug 15 #Javascript
深入理解Vue router的部分高级用法
Aug 15 #Javascript
JS打印彩色菱形的实例代码
Aug 15 #Javascript
layui点击按钮添加可编辑的一行方法
Aug 15 #Javascript
layui 优化button按钮和弹出框的方法
Aug 15 #Javascript
You might like
php简单统计在线人数的方法
2016/05/10 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
一些javascript一些题目的解析
2010/12/25 Javascript
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
ES6中class类用法实例浅析
2017/04/06 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
使用Vue构建可重用的分页组件
2018/03/26 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
uni-app从安装到卸载的入门教程
2020/05/15 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
Python内置函数Type()函数一个有趣的用法
2015/02/18 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
分享python数据统计的一些小技巧
2016/07/21 Python
详解如何设置Python环境变量?
2019/05/13 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
2019/06/19 Python
基于Python执行dos命令并获取输出的结果
2019/12/30 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
详解HTML5新增标签
2017/11/27 HTML / CSS
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
《傅雷家书》教学反思
2014/04/20 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
销售员工作检讨书(推荐篇)
2014/10/18 职场文书
小学大队委竞选口号
2015/12/25 职场文书
python字典进行运算原理及实例分享
2021/08/02 Python