目录

1.父组件向子组件传值

2.子组件向父组件传值:

3.子组件之间传值:

子组件之间传值第一种方法:

子组件之间传值第二种方法:


1.父组件向子组件传值

自定义属性(:属性名、props)

  ① 数据传递:
      父组件中使用子组件时,直接绑定属性,将要传递的值通过该属性传递给子组件

<子组件名 :属性名="属性值"/>

    ② 数据接收:
        子组件接收父组件传递过来的值,使用:props

export default {// 、、、props: ['属性名']// 、、、
}

③ 数据使用:

子组件接收到父组件传递过来的值后,直接通过props里面的属性名,使用该属性

注意:props里面接收的属性名要和 父组件使用子组件时写的传递的属性名一致

示例:

父组件 App.vue

<template><div id="app"><div>父组件</div><!-- 父组件 给 子组件  传递数据 --><props :name="name" :age="20" :sex="'女'" :foods="foods"/></div>
</template><script>//引用子组件import props from './components/props.vue';export default {name:'App',//注册组件components:{ props},data(){return{//传给子组件的值name:'张三',foods:['鱼','蛋糕'],}},}
</script>

子组件 props.vue

<template><div class="props"><div>子组件</div><h4>我叫:{{name}}</h4><h4>我今年:{{age}}</h4><h4>性别:{{sex}}</h4><h4>我喜欢的食物是:</h4><ul  v-for="item in foods" :key="item"><li> {{ item }} </li></ul></div>
</template><script>
export default {
name:'props',
//子组件接收父组件传递过来的值,使用:props//1.简单声明接收
props:['name','age','sex','foods']//2.接收的时候对数据进行类型限制
// props:{
//    name:String,
//    age:Number,
//    sex:String,
//    foods:[]
// }
//3.接收的时候对数据:进行类型限制 + 默认值的指定 + 必要性的限制
// props:{
//     name:{
//         required:true,//是否是必要传值  可不要时为 false
//         type:String, //定义类型 类型  :字符串类型、
//         default:"张三"   //没有传值的话 默认值 一般与 required:false 一起用
//     }
// }//备注:props是只读的,如果修改了就会发出警告,想要修改就复制props中的一份,然后去data修改中的据。}
</script>

页面效果:

2.子组件向父组件传值:

自定义事件(@自定义事件名、$emit)

① 数据传递:

子组件中使用 $emit 将数据传递给父组件

this.$emit('自定义事件名', '要传递的数据')

② 数据接收:

父组件使用子组件时,绑定自定义事件,接收子组件传递过来的数据

<子组件名 @自定义事件名="方法名"/>
methods: {方法名(val) {// val 是子组件传递过来的数据// 、、、}}

③ 数据使用:

数据转存- - -父组件中定义一个变量,将子组件传递过来的数据 转存 到 该变量,然后使用该变量

示例

父组件 App.vue

<template><div class="app"><h1>{{msg}},学生姓名是:{{studentName}}</h1><!--  第一步 --><!-- 通过父组件给子组件绑定一个自定义事件实现:子给父传递数据  --><Student v-on:atguigu="getStudentName" /><!-- 只触发一次 --><!-- <Student @atguigu.once="getStudentName"/> --><!-- 给组件加事件的时候要加 .native --><!-- <Student v-on:atguigu="getStudentName" @click.native="show"/> --></div>
</template><script>import Student from './components/Student.vue';export default {name:'App',components:{Student},data() {return {msg:'父组件',studentName:''}},methods:{// 第四步  当多个数据传递过来的时候用 ...params 来接收getStudentName(name,...params){console.log('app收到学生名:'+name+params)this.studentName = name}},}
</script><style scoped>.app{background-color: gray;padding: 5px;}
</style>

子组件 Student.vue

<template><div class="student"><h2>学生姓名:{{name}}</h2><h2>学生性别:{{sex}}</h2><!-- 第二步 --><button @click="getStudentName">传给School学生名</button></div>
</template><script>
export default {name:'Student',data() {return {name:'张三',sex:'女'}},methods:{//  第三步getStudentName(){//触发Student组件实例身上的 atguigu 事件//可以传递多个值this.$emit('atguigu',this.name,444,555)},}
</script><style scoped>.student{background-color: pink;padding: 5px;margin-top: 30px;}
</style>

点击 传给School学生名 页面效果:

3.子组件之间传值:

子组件之间传值第一种方法:

EventBus(eventBus.js,emit emit,emit,on)

兄弟组件 Left.vue Right.vue 之间传递数据,例如 Left.vue 向 Right.vue 传递数据

1. 先创建一个 eventBus.js 文件,导出一个 Vue实例,内容如下:

import Vue from 'vue'export default new Vue()

2. 数据传递:

① 传递数据的组件中,导入 eventBus.js

import bus from './eventBus.js'

② 使用 $emit 传递数据

bus.$emit('自定义事件名', 传递的数据)

3. 数据接收:

① 传递数据的组件中,导入 eventBus.js

import bus from './eventBus.js'

② 使用 $on 接收数据

bus.$on('自定义事件名', val => {// ③ 数据转存 、、、
})

4. 数据使用:

数据转存- - -父组件中定义一个变量,将子组件传递过来的数据 转存 到 该变量,然后使用该变量

示例

1.在src下创建utlist文件在文件中创建eventBus.js

import vue from 'vue'export default new vue()

App:

<template><div class="app"><h1>{{msg}}</h1><Student /><School/></div>
</template><script>import School from './components/School.vue';import Student from './components/Student.vue';export default {name:'App',components:{School,Student},data() {return {msg:'父组件',studentName:''}},}
</script><style scoped>.app{background-color: gray;padding: 5px;}
</style>

Stydent子组件School 子组件 传递 数据

  Stydent子组件

<template><div class="student"><h1>Student组件</h1><h2>学生姓名:{{name}}</h2><h2>学生性别:{{sex}}</h2><!-- 第二步 创建事件 要发送的数据 --><button @click="senName">发送学生名字</button></div>
</template><script>
//第一步:引入 创建好的js文件
import bus from '../utlis/eventBus.js'export default {name:'Student',data() {return {name:'张三',sex:'女'}},methods:{//第三步 发送数据给 eventBus.js  senName(){bus.$emit('name',this.name)},}
}
</script><style scoped>.student{background-color: pink;padding: 5px;margin-top: 30px;}
</style>

School 子组件

<template><div class="school"><h1>School组件</h1><h2>学校名称:{{name}}</h2><h2>学校地址:{{address}}</h2><!-- 第七步:使用数据 --><h2>学生名字:{{studentName}}</h2></div>
</template><script>
//第四步:引入 创建好的js文件
import bus from '../utlis/eventBus.js'export default {name:'School',data(){return{name:'江西软件学校',address:'南昌',//第五步 :转存数据studentName:''}},//第六步 从 eventBus.js 接收数据created(){//注意这 要与Student写名一样为 share//  接收数据 bus.$on、val   val是接收的数据bus.$on('name',val => {//  转存数据this.studentName = val})}
}
</script><style scoped>.school{background-color: aqua;padding: 5px;}</style>

 页效果:

点击前:            点击后:

子组件之间传值第二种方法:

1.在main.js 中添加事件

     //全局事件总线 第一步beforeCreate() {Vue.prototype.$bus = this;}

2. 数据传递:

① 用 this.$bus.$emit 进行数据传递

 this.$bus.$emit(自定义数据,传递的数据)

②  等接收完数据就要立马解绑

this.$bus.$off(自定义事件);

3. 数据接收:

① 用 this.$bus.$on 进行数据接收

this.$bus.$on(自定义事件,(data)=>{}

示例:

  1.修改main.js文件

 //  该文件时整个项目的入口文件//   引入Vueimport Vue from 'vue'//    引入App组件,是所有组件的父组件import App from './App.vue'Vue.config.productionTip = falsenew Vue({el: '#app',render: h => h(App),//全局事件总线 第一步beforeCreate() {Vue.prototype.$bus = this;}})

App引用:

<template><div class="app"><h1>App</h1><School/><Student/></div>
</template><script>import School from './components/School.vue';import Student from './components/Student.vue';export default {name:'App',components:{School,Student},}
</script><style scoped>.app{background-color: gray;padding: 5px;}
</style>

Stydent子组件School 子组件 传递 数据

  Stydent子组件:

<template><div class="student"><h1>Student</h1><h2>学生姓名:{{name}}</h2><h2>学生性别:{{sex}}</h2><!-- 第二步 创建点击事件 --><button @click="sendStubentName">把学生名给School组件</button></div>
</template><script>
export default {name:'Student',data() {return {name:'张三',sex:'女'}},methods:{//第三步提供数据 创建hello自定义事件 传输学生名字 sendStubentName(){this.$bus.$emit('hello',this.name)}},//第四步 等接收完数据就要立马解绑事件beforeDestroy(){this.$bus.$off('hello');}
}
</script><style scoped>.student{background-color: pink;padding: 5px;margin-top: 30px;}
</style>

School 子组件:

<template><div class="school"><h1>school</h1><h2>学校名称:{{name}}</h2><h2>学校地址:{{address}}</h2><!-- 第八步: 数据使用 --><h2>学生名字:{{StudentName}}</h2></div>
</template><script>
export default {name:'School',data(){return{name:'江西软件学校',address:'南昌',//第五步 :转存数据StudentName:''}},// methods(){//    // 接收数据   第二种方式(2)//     demo(data);{//       console.log('我是school组件,收到了数据',data);//     }// },mounted(){//   console.log('school',this.$on)//第六步  接收数据  hello自定义事件名  接收的的数据//接收数 第一种方式写箭头函数 this.$bus.$on('hello',(data)=>{// 第七步 把接收的数据 赋值给 StudentNamethis.StudentName = data})//接收数据 第二种方式(1)// this.$bus.$on('hello',demo)}
}
</script><style scoped>.school{background-color: aqua;padding: 5px;}</style>

 页效果: 

        点击前: 点击后:

vue2组件之间传值(数据共享)相关推荐

  1. Vue2 组件之间传值

    组件件的传值有点复杂,我在这里记录一下哈 Vue2.0 传值方式: 在Vue的框架开发的项目过程中,经常会用到组件来管理不同的功能,有一些公共的组件会被提取出来.这时必然会产生一些疑问和需求?比如一个 ...

  2. vue 2 组件之间传值

    对vue2版本的组件之间传值的一个简单整合: 父组件 => 子组件: props 和 refs - props: { msg: String } //parent <hello-world ...

  3. VUE2 组件间传值

    概述 常见使用场景可以分为三类: 父子通信: 父向子传递数据是通过 props 子向父是通过 events( $emit ) 通过父链 / 子链也可以通信( $parent / $children ) ...

  4. 【微信小程序】父子组件之间传值

    微信小程序父子组件之间传值有两种: 1.父组件向子组件传值 2.子组件向父组件传值 区别: 父向子传值使用的是属性绑定,子组件中的properties对象进行接收父组件传递过来的值. 子向父传值使用的 ...

  5. React组件之间传值

    前言 今天群里面有很多都在问关于 React 组件之间是如何通信的问题,之前自己写的时候也遇到过这类问题.下面是我看到的一篇不错英文版的翻译,看过我博客的人都知道,我翻译可能不会按部就班,会尽可能用中 ...

  6. vue中,兄弟组件之间传值

    vue中,兄弟组件之间传值 项目中,需要使用多个子组件,当需要传递值的时候,较为麻烦,怎样实现呢 1.一般可以使用子组件a传递给父组件,再由父组件传递给子组件b.但是一般较为麻烦, 2.使用bus作为 ...

  7. Vue组件之间传值/调用方法的几种方式

    组件之间传值/调用方法的几种方式 (一)父组件向子组件传值==props 1.在父组件中使用子组件的地方绑定数据 <children :message="message"&g ...

  8. Vue - 全局组件之间传值(中间件传值)

    Vue项目中全局组件之间传值(中间件传值) 一. 使用方法 二. 传值实例 一. 使用方法 创建一个中间件文件,文件名自定义 这里创建的文件为 send.js send.js 中配置 import V ...

  9. vue组件之间传值几种方法

    方法一.父子组件传值 通过props向下传递 父组件 <div class="menu_header"><Menu :msgChild="msg1&qu ...

最新文章

  1. Exchage 2007 Client Application Functions(2) -- 如何收取邮件
  2. TF-IDF与余弦相似性的应用(一):自动提取关键词
  3. AC日记——Power收集 洛谷 P3800
  4. Database:Database数据库的简介、类型及其区别(关系数据库VS非关系型数据库)、案例应用之详细攻略
  5. PHP案例 网页计数器设计
  6. Ubuntu 12.04 静态ip的设置方法
  7. java bean状态_无状态和有状态企业Java Bean
  8. Error:java: Compilation failed: internal java compiler error
  9. JAVA day13,14 API、Object类、日期时间类(long,Date,Calendar,DateFormat)、String类(字符串,可变长字符串)、正则表达式、包装类
  10. Oracle 中session和processes的初始设置
  11. android上跑脚本,光遇自动跑图脚本
  12. 电子计算机与媒体阅读答案,电子计算机与多媒体课课练.docx
  13. 读计算机网络得学五笔吗,电脑五笔打字难不难学?大约要学多久才可以掌握?
  14. 设计算法判断单链表的全部 n 个字符是否中心对称
  15. 判断浏览器的cookie是否开启
  16. 68个经典励志小故事|哲理小故事,让你终身受益(3)
  17. 自己搜的算法题2.0
  18. 用户体验——以用户为中心的Web设计_Chapter3. 战略层:网站目标和用户需求
  19. OSChina 周日乱弹 ——xslai1210生日快乐
  20. Linux NVMe Driver学习笔记之8:IO SQ/CQ的创建过程

热门文章

  1. mybatis实现分页的几种方式
  2. java毕业生设计中小企业人力资源管理系统计算机源码+系统+mysql+调试部署+lw
  3. 大数据技术之phoenix
  4. xp系统能用云服务器,xp系统能控制云服务器吗
  5. html中加载页面内容不显示不出来,css怎么加载不正常?原因是什么?
  6. 实战:拼团活动如何设计?
  7. Android 10.0 根据包名默认授予app悬浮窗权限
  8. NAT SIP helper
  9. 博士毕业论文英文参考文献换行_华东师范大学中文系2017级本科生毕业论文工作规程及评审细则...
  10. Pandas自动分割汇总表写入到子表中