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>


目录
相关文章
|
13天前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
117 64
|
20天前
|
监控 JavaScript 算法
深度剖析 Vue.js 响应式原理:从数据劫持到视图更新的全流程详解
本文深入解析Vue.js的响应式机制,从数据劫持到视图更新的全过程,详细讲解了其实现原理和运作流程。
|
1月前
|
JavaScript 数据管理 Java
在 Vue 3 中使用 Proxy 实现数据双向绑定的性能如何?
【10月更文挑战第23天】Vue 3中使用Proxy实现数据双向绑定在多个方面都带来了性能的提升,从更高效的响应式追踪、更好的初始化性能、对数组操作的优化到更优的内存管理等,使得Vue 3在处理复杂的应用场景和大量数据时能够更加高效和稳定地运行。
53 1
|
1月前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
56 1
|
3月前
|
JavaScript
Vue组件传值异步问题--子组件拿到数据较慢
Vue组件传值异步问题--子组件拿到数据较慢
245 58
|
2月前
|
API
vue3知识点:响应式数据的判断
vue3知识点:响应式数据的判断
29 3
|
2月前
|
存储 缓存 JavaScript
vue表单案例练习:vue表单创建一行数据及删除数据的实现与理解
vue表单案例练习:vue表单创建一行数据及删除数据的实现与理解
47 2
|
3月前
|
JavaScript
Vue+element_Table树形数据与懒加载报错Error in render: “RangeError: Maximum call stack size exceeded“
本文讨论了在使用Vue和Element UI实现树形数据和懒加载时遇到的“Maximum call stack size exceeded”错误,指出问题的原因通常是因为数据中的唯一标识符`id`不唯一,导致递归渲染造成调用栈溢出。
113 1
Vue+element_Table树形数据与懒加载报错Error in render: “RangeError: Maximum call stack size exceeded“
|
2月前
|
JavaScript
vue3,使用watch监听props中的数据
【10月更文挑战第3天】
1351 2
在 Vue3 中,如何使用 setup 函数创建响应式数据?
在 Vue3 中,如何使用 setup 函数创建响应式数据?