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 instanceof,typeof的区别
Mar 24 Javascript
jQuery常见开发技巧详细整理
Jan 02 Javascript
利用js实现选项卡的特别效果的实例
Mar 03 Javascript
jQuery+CSS3实现3D立方体旋转效果
Nov 10 Javascript
javascript实现粘贴qq截图功能(clipboardData)
May 29 Javascript
AngularJs 动态加载模块和依赖
Sep 15 Javascript
EasyUI 结合JS导出Excel文件的实现方法
Nov 10 Javascript
javascript基础知识讲解
Jan 11 Javascript
基于DOM节点删除之empty和remove的区别(详解)
Sep 11 Javascript
js继承的这6种方式!(上)
Apr 23 Javascript
layui的select联动实现代码
Sep 28 Javascript
在antd Form表单中select设置初始值操作
Nov 02 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类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
2015/09/25 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
javascript最常用与实用的创建类的代码
2010/08/12 Javascript
Jquery颜色选择器ColorPicker实现代码
2012/11/14 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
bootstrapValidator 重新启用提交按钮的方法
2017/02/20 Javascript
AngularJS折叠菜单实现方法示例
2017/05/18 Javascript
原生JavaScript实现todolist功能
2018/03/02 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
2020/04/17 Javascript
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
windows环境下tensorflow安装过程详解
2018/03/30 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
Python判断两个list是否是父子集关系的实例
2018/05/04 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
在Sublime Editor中配置Python环境的详细教程
2020/05/03 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
法国在线宠物店:zooplus.fr
2018/02/23 全球购物
澳大利亚当地最大的时装生产商:Cue
2018/08/06 全球购物
企划经理的岗位职责
2013/11/17 职场文书
高中考试作弊检讨书
2014/01/14 职场文书
老干部工作先进集体事迹材料
2014/05/21 职场文书
Vue3 Composition API的使用简介
2021/03/29 Vue.js
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python