Vue中设置组件的自定义事件和解绑组件的自定义事件

2023-12-31 01:28

本文主要是介绍Vue中设置组件的自定义事件和解绑组件的自定义事件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

组件的自定义事件

  • 设置School组件实现props,子给父传数据。School组件用于和Student组件做对比。

  • App向School组件传getSchoolName,School组件通过props接收存入School的VueConponent。随后通过调用getSchoolName实现子给父传递数据

  • 想让组件标签识别原生Vue提供的事件。需要加入native

    <School @click.native='show'/>
  • <template><div class="school"><h2>学校的名字:{{ name  }}</h2><button @click="sendSchoolName">测试sendSchoolName方法</button></div>
    </template>
    ​
    <script>
    export default {props: ['getSchoolName'],data(){return {name: '小猴子的玩具商'}},methods:{sendSchoolName(){this.getSchoolName(this.name)}},
    }
    </script>
    <style scoped>.school {background-color: pink;padding: 5px;margin-top: 30px;}
    </style>>
    ​
  • Student组件实现功能也是子给父传递数据。但用组件的自定义事件来实现

  • <template><div class="blue"><h2>学生的名字:{{ name }}</h2><h2>学生的名字:{{ address }}</h2><button @click="sendStudentName">测试sendStudentName方法</button></div>
    </template>
    <script>
    export default {name:'Student',data(){return {name:'boy',address:'老地方'}},methods: {sendStudentName(){// 事件在谁身上则在哪里触发,故触发Student组件实例身上的boy事件,emit有发射的意思。传了一个参数name给Appthis.$emit('boy',this.name)}},
    }
    </script>
    <style scoped>.blue{background-color: blue;padding: 5px;}
    </style>
     
  • Student和School组件实现的区别在于

    1、App中的getSchoolName方法是直接给School组件,School组件需要props接收一下,自己调用一下。

    2、App中的getStudentName方法不直接传给Student组件,而是利用触发事件( this.$emit() ) 的方式,调用demo

  • <template><div class="title"><router-view/><h2>{{ mas }}</h2><!-- 给组件的实列对象VueComponent上绑定事件(boy事件)。如果触发boy事件demo就被调用 --><!-- 第一种写法,<Student v-on:boy = "demo"/> --><!-- 第二种写法,用ref获取Student组件的VueComponent--><Student ref="student"/><!-- 通过父组件给子组件传递函数类型的props实现:子给父传递数据 --><School :getSchoolName ='getSchoolName'/></div>
    </template>
    ​
    <script>
    import Student from '../src/components/Student.vue'
    import School from '../src/components/School.vue'
    export default {name: 'App',components:{Student,School},data(){return {mas: '你好啊'}},methods: {//接收School组件传过来的namegetSchoolName(name){console.log('发送成功了',name);},//接收Student组件传过来的namedemo(name){console.log('demo被调用',name)}}
    },// 第二种写法的灵活性更高,当要求是:延迟3秒才触发事件。第二种方法可以实现。如下mounted(){setTimeout(()=>{// this.$refs.student为获取到Student组件的VueComponent,$on为当什么的时候。括号内的第一个元素为事件名,第二个元素为触发事件回调的方法this.$refs.student.$on('boy', this.demo)},3000)}
    </script>
    <style scoped>.title {background-color: gray;padding: 5px;}
     

    解绑组件的自定义事件

    • this.$off()//解绑一个自定义事件

    • this.$off([ ])//解绑多个自定义事件

    • this.$off()//解绑所有的自定义事件

    • this.$destroy()销毁当前组件的VueConponent,而Vue提供的事件还能响应

    • <template><div class="blue"><h2>学生的名字:{{ name }}</h2><h2>学生的名字:{{ address }}</h2><button @click="sendStudentName">测试sendStudentName方法</button><button @click="unbind">解绑自定义事件</button><button @click="death">销毁当前组件的实例化对象</button>
      ​</div>
      </template>
      ​
      <script>
      export default {name:'Student',data(){return {name:'boy',address:'老地方'}},methods: {sendStudentName(){// 事件在谁身上则在哪里触发,故触发Student组件实例身上的boy事件,emit有发射的意思。传了一个参数namethis.$emit('boy',this.name)this.$emit('girl')},unbind(){this.$off('boy')//解绑一个自定义事件this.$off(['boy','girl'])//解绑多个自定义事件this.$off()//解绑所有的自定义事件},death(){//销毁当前的Student组件的实例,销毁后所有的Student实列的自定义事件全都不奏效。this.$destroy()}},
      }
      </script>
      <style scoped>.blue{background-color: blue;padding: 5px;}
      </style>

这篇关于Vue中设置组件的自定义事件和解绑组件的自定义事件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/554574

相关文章

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

HTML5中的Microdata与历史记录管理详解

《HTML5中的Microdata与历史记录管理详解》Microdata作为HTML5新增的一个特性,它允许开发者在HTML文档中添加更多的语义信息,以便于搜索引擎和浏览器更好地理解页面内容,本文将探... 目录html5中的Mijscrodata与历史记录管理背景简介html5中的Microdata使用M

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

前端下载文件时如何后端返回的文件流一些常见方法

《前端下载文件时如何后端返回的文件流一些常见方法》:本文主要介绍前端下载文件时如何后端返回的文件流一些常见方法,包括使用Blob和URL.createObjectURL创建下载链接,以及处理带有C... 目录1. 使用 Blob 和 URL.createObjectURL 创建下载链接例子:使用 Blob

Vuex Actions多参数传递的解决方案

《VuexActions多参数传递的解决方案》在Vuex中,actions的设计默认只支持单个参数传递,这有时会限制我们的使用场景,下面我将详细介绍几种处理多参数传递的解决方案,从基础到高级,... 目录一、对象封装法(推荐)二、参数解构法三、柯里化函数法四、Payload 工厂函数五、TypeScript