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 相关文章推荐
js几个不错的函数 $$()
Oct 09 Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
Apr 01 Javascript
JavaScript中的apply()方法和call()方法使用介绍
Jul 25 Javascript
jQuery中ajax的使用与缓存问题的解决方法
Dec 19 Javascript
js如何获取object类型里的键值
Feb 18 Javascript
jQuery实现textarea自动增长宽高的方法
Dec 18 Javascript
js实现表单及时验证功能 用户信息立即验证
Sep 13 Javascript
js实现前端图片上传即时预览功能
Aug 02 Javascript
微信小程序 动画的简单实例
Oct 12 Javascript
vue监听键盘事件的快捷方法【推荐】
Jul 11 Javascript
jQuery分组选择器简单用法示例
Apr 04 jQuery
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
Oct 21 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 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
Zend Framework入门应用实例详解
2016/12/11 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
写的htc的数据表格
2007/01/20 Javascript
js以对象为索引的关联数组
2010/07/04 Javascript
javascript与webservice的通信实现代码
2010/12/25 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
jquery win 7透明弹出层效果的简单代码
2013/08/06 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
Javascript 实现图片无缝滚动
2014/12/19 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
JS严格模式知识点总结
2018/02/27 Javascript
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
Python实现ping指定IP的示例
2018/06/04 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
python性能测试工具locust的使用
2020/12/28 Python
世界上最好的儿童品牌:AlexandAlexa
2018/01/27 全球购物
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
小学家长会邀请函
2014/01/23 职场文书
甜品店创业计划书
2014/09/21 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
教师求职自荐信范文
2015/03/04 职场文书