vue2:子组件给父组件传递数据(传统方法+自定义事件方法

简介: vue2:子组件给父组件传递数据(传统方法+自定义事件方法

1.传统的方式子组件传递数据给父组件

子组件给父组件传递信息,首先父组件要给子组件一个函数,然后子组件在调用这个函数
        通过父组件给子组件传递函数类型的props实现:子给父传递数据


例子:

我们定义一个函数:getSchoolName

App.vue:

<template>                        ...
<LqjSchool:getSchoolName="getSchoolName"></LqjSchool><StudentLqj></StudentLqj></div></template>
<script>...methods:{
getSchoolName(name){
console.log('App收到了学校名:',name)
                                }
                                }
...</script>

LqjSchool.vue:

<template><divclass="School"><button@click="sendSchoolName">把学校名给App</button></div></template>
<script>...props:['getSchoolName']
methods:{
sendSchoolName(){
this.getSchoolName(this.name)
                                }
                                }
...</script>

2.自定义事件

       v-on:atlqj="demo"解释:v-on或@在哪个组件上就是给那个组件绑定事件,

       例如:<StudentLqj v-on:atlqj="demo"></StudentLqj>

       解释:由于v-on在StudentLqj组件上,所以可以说v-on在组件StudentLqj的vc身上绑定了个事件,时间名字叫:atlqj,如果有人以后

       触发了这个事件,那么demo函数就会被调用。


第一种写法:使用@或v-on

举例:

App.vue:

<template>        通过父组件给子组件绑定一个自定义事件实现:子给父传递数据 
<StudentLqjv-on:atlqj="getStudentName"></StudentLqj>                //或者
                //<StudentLqj@atlqj="getStudentName"></StudentLqj>                //如果像点击之点击一次后不让用户再次点击:
                //<StudentLqj@atlqj.once="getStudentName"></StudentLqj></template>
<script>methods:{
...getStudentName(name){
console.log('App收到了学生名:',name)
                                }
...                }
</script>

给哪个组件绑定的找哪个组件触发:

StudentLqj.vue:

<template><button@click="sendStudentName">把学生名给App</button></template>
<script>...methods:{
sendStudentName(){
//触发Student组件实例身上的atlqj事件this.$emit('atlqj',this.name)
                                }
                        }
...</script>

第二种写法:使用ref(更灵活)

App.vue:

<template><StudentLqjref="student"></StudentLqj></template>
<script>...mounted(){
setTimeout(()=>{
//this.$refs.student.$on('atlqj',this.getStudentName)//解释:$on:可以一直点击this.$refs.student.$once('atlqj',this.getStudentName)
//解释:$once:只能点击一次,再点击就不生效了                        },3000)
//等三秒之后点击才可以起效                        }
...</script>

StudentLqj.vue:

<template><divclass="Student"><button@click="sendStudentName">把学生名给App</button></div></template>
<script>...methods:{
sendStudentName(){
//触发Student组件实例身上的atlqj事件this.$emit('atlqj',this.name)
                                }
                        }
...</script>


目录
相关文章
|
2月前
|
JavaScript
Vue中ref创建_基本类型的响应式数据,在Vue2的年代,数据配在data里,Vue3的区别是不把响应数据写在data里,那个数据是响应式的用ref包一下,let name = ref(“张三“)
Vue中ref创建_基本类型的响应式数据,在Vue2的年代,数据配在data里,Vue3的区别是不把响应数据写在data里,那个数据是响应式的用ref包一下,let name = ref(“张三“)
|
2月前
|
前端开发
Vue2和Vue3的区别,在setup中定义的数据,在data(){return中能否定义到},在setup我们不能用this,写在return中可以用this,但是不能在setup否则会报错
Vue2和Vue3的区别,在setup中定义的数据,在data(){return中能否定义到},在setup我们不能用this,写在return中可以用this,但是不能在setup否则会报错
|
8天前
|
JavaScript
vue学习(8)数据代理
vue学习(8)数据代理
21 1
|
1月前
|
JavaScript
Vue学习之--------深入理解Vuex之多组件共享数据(2022/9/4)
这篇文章通过一个实际的Vue项目案例,演示了如何在Vuex中实现多组件间共享数据。文章内容包括在Vuex的state中新增用户数组,创建Person.vue组件用于展示和添加用户信息,以及在Count组件中使用Person组件操作的数据。通过测试效果展示了组件间数据共享和状态更新的流程。
Vue学习之--------深入理解Vuex之多组件共享数据(2022/9/4)
|
6天前
|
JavaScript
Vue组件传值异步问题--子组件拿到数据较慢
Vue组件传值异步问题--子组件拿到数据较慢
11 0
|
1月前
|
JavaScript 前端开发
Vue学习之--------Vue中收集表单数据(使用v-model 实现双向数据绑定、代码实现)(2022/7/18)
这篇文章介绍了Vue中使用v-model实现表单数据收集的方法,包括基础知识、代码实例和测试效果,并提供了一些额外建议。
Vue学习之--------Vue中收集表单数据(使用v-model 实现双向数据绑定、代码实现)(2022/7/18)
|
1月前
|
JavaScript API
Vue学习之--------列表排序(ffilter、sort、indexOf方法的使用)、Vue检测数据变化的原理(2022/7/15)
这篇博客文章讲解了Vue中列表排序的方法,使用`filter`、`sort`和`indexOf`等数组方法进行数据的过滤和排序,并探讨了Vue检测数据变化的原理,包括Vue如何通过setter和数组方法来实现数据的响应式更新。
Vue学习之--------列表排序(ffilter、sort、indexOf方法的使用)、Vue检测数据变化的原理(2022/7/15)
|
1月前
|
JavaScript
Element - Vue使用slot-scope和v-for遍历数据为树形表格
这篇文章介绍了在Vue中使用`slot-scope`和`v-for`指令来遍历数据并将其渲染为树形表格的方法。
25 0
Element - Vue使用slot-scope和v-for遍历数据为树形表格
|
1月前
|
JavaScript 数据处理
如何使用 Vue.js 将数据对象的值放入另一个数据对象中?
如何使用 Vue.js 将数据对象的值放入另一个数据对象中?
|
1月前
|
JavaScript UED
强制 Vue 重新渲染组件的5种方法,解决你开发过程中数据和视图无法同步的Bug。
强制 Vue 重新渲染组件的5种方法,解决你开发过程中数据和视图无法同步的Bug。