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 相关文章推荐
Gird事件机制初级读本
Mar 10 Javascript
Convert Seconds To Hours
Jun 16 Javascript
jquery获得下拉框值的代码
Aug 13 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
Oct 15 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
Jan 09 Javascript
JScript中的条件注释详解
Apr 24 Javascript
jquery使用经验小结
May 20 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
Jul 02 Javascript
jquery css实现邮箱自动补全
Nov 14 Javascript
Node.js查找当前目录下文件夹实例代码
Mar 07 Javascript
小程序从手动埋点到自动埋点的实现方法
Jan 24 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
Sep 18 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模板之Phpbean的目录结构
2008/01/10 PHP
php学习笔记 面向对象的构造与析构方法
2011/06/13 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
运用jQuery定时器的原理实现banner图片切换
2014/10/22 Javascript
创建js对象和js类的方法汇总
2014/12/24 Javascript
jQuery中animate()方法用法实例
2014/12/24 Javascript
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
简述AngularJS相关的一些编程思想
2015/06/23 Javascript
node.js操作MongoDB的实例详解
2017/10/11 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
2018/11/30 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
微信小程序实现的一键复制功能示例
2019/04/24 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
python正常时间和unix时间戳相互转换的方法
2015/04/23 Python
python提取页面内url列表的方法
2015/05/25 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
Python callable内置函数原理解析
2020/03/05 Python
什么是python的必选参数
2020/06/21 Python
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
简洁自适应404页面HTML好看的404源码
2020/12/16 HTML / CSS
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
工商管理毕业生推荐信
2013/12/24 职场文书
母亲节感恩活动记录
2014/03/16 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
实习单位指导教师评语
2014/12/30 职场文书
大学生自荐书范文
2015/03/05 职场文书
税务会计岗位职责
2015/04/02 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
何时使用Map来代替普通的JS对象
2021/04/29 Javascript