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 相关文章推荐
Javascript与vbscript数据共享
Jan 09 Javascript
ExtJS 2.0实用简明教程之应用ExtJS
Apr 29 Javascript
javascript最基本的函数汇总
Jun 25 Javascript
JS生成某个范围的随机数【四种情况详解】
Apr 20 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
Nov 30 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
Oct 24 Javascript
vue2.0 根据状态值进行样式的改变展示方法
Mar 13 Javascript
js html实现计算器功能
Nov 13 Javascript
微信小程序Echarts图表组件使用方法详解
Jun 25 Javascript
vue data变量相互赋值后被实时同步的解决步骤
Aug 05 Javascript
ES6学习教程之Promise用法详解
Nov 22 Javascript
jQuery实现电梯导航模块
Dec 22 jQuery
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
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
Vue.js实现输入框绑定的实例代码
2017/08/24 Javascript
深入理解 Koa 框架中间件原理
2018/10/18 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
轻松理解Python 中的 descriptor
2017/09/15 Python
python清理子进程机制剖析
2017/11/23 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
pycharm执行python时,填写参数的方法
2018/10/29 Python
一百行python代码将图片转成字符画
2021/02/19 Python
浅谈PYTHON 关于文件的操作
2019/03/19 Python
Python之NumPy(axis=0 与axis=1)区分详解
2019/05/27 Python
Python 变量的创建过程详解
2019/09/02 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
Python Json数据文件操作原理解析
2020/05/09 Python
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
商业活动邀请函
2014/02/04 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
高三家长寄语
2014/04/03 职场文书
优秀班主任先进事迹材料
2014/12/16 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
酒店开业主持词
2015/07/02 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
Python matplotlib多个子图绘制整合
2022/04/13 Python
win11开机发生死循环重启怎么办?win11开机发生死循环重启解决方法
2022/08/05 数码科技