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 IFrame 强制刷新代码
Jul 23 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
Jul 30 Javascript
javascript遇到html5的一些表单属性
Jul 05 Javascript
jQuery Validate表单验证深入学习
Dec 18 Javascript
JavaScript学习笔记之数组的增、删、改、查
Mar 23 Javascript
Javascript中document.referrer隐藏来源的方法
Jan 16 Javascript
原生js实现节日时间倒计时功能
Jan 18 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
Mar 30 Javascript
基于JavaScript中字符串的match与replace方法(详解)
Dec 04 Javascript
小程序开发基础之view视图容器
Aug 21 Javascript
vue 本地环境跨域请求proxyTable的方法
Sep 19 Javascript
Node.js 的 GC 机制详解
Jun 03 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提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
php中rename函数用法分析
2014/11/15 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
(JS实现)MapBar中坐标的加密和解密的脚本
2007/05/16 Javascript
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
JavaScript中的对象继承关系
2016/08/01 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
JavaScript实现左右下拉框动态增删示例
2017/03/09 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
AngularJS自定义指令之复制指令实现方法
2017/05/18 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
[54:17]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第二场 1月10日
2021/03/11 DOTA
python实现查询苹果手机维修进度
2015/03/16 Python
pandas 对日期类型数据的处理方法详解
2019/08/08 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
浅谈keras中loss与val_loss的关系
2020/06/22 Python
总结html5自定义属性有哪些
2020/04/01 HTML / CSS
专业实习自我鉴定
2013/10/29 职场文书
自荐信格式技巧有哪些呢
2013/11/19 职场文书
烹调加工管理制度
2014/02/04 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
宣传口号大全
2014/06/16 职场文书
辞职信标准格式
2015/02/27 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python