IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue组件自定义事件 -> 正文阅读

[JavaScript知识库]Vue组件自定义事件

绑定自定义事件

引例:子组件给父组件传值
-首先我们可以通过props来传递, 它的实现原理是父亲给儿子一个函数,儿子通过调用这个函数进行数据传递。
ex:
子组件

<template>
  <div>
    <button @click="sendName">子组件的点击按钮,点击将数据传递给父组件</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      name: "son",
      sex: "nan",
    };
  },
  mounted() {},
  props: ["getName"],
  methods: {
    sendName() {
      this.getName(this.name);
    },
  },
};
</script>
<style lang='less' scoped>
</style>

父组件

<template>
  <div>
    <div id="test">
      <p>我是一个父组件</p>
      我收到的儿子的名字是:{{ sonName }}
    </div>
    <Son :getName="getName"></Son>
  </div>
</template>

<script>
import Son from "@/components/custom/Son.vue";
export default {
  data() {
    return {
      sonName: "",
    };
  },
  components: { Son },
  methods: {
    getName(name) {
      this.sonName = name;
    },
  },
};
</script>
<style lang='less' scoped>
#test {
  width: 200px;
  height: 200px;
  background: red;
}
</style>

点击传值按钮:
在这里插入图片描述

-自定义事件实现

它的原理是给组件实例对象绑定一个事件,让后在组件里面取触发,这样就可以给绑定的事件函数传递子组件的数据。
父组件

<template>
  <div>
    <div id="test">
      <p>我是一个父组件</p>
      我收到的儿子的名字是:{{ sonName }}
    </div>
    <Son @getName="getName"></Son>
  </div>
</template>

<script>
import Son from "@/components/custom/Son.vue";
export default {
  data() {
    return {
      sonName: "",
    };
  },
  components: { Son },
  methods: {
    getName(name) {
      this.sonName = name;
    },
  },
};
</script>
<style lang='less' scoped>
#test {
  width: 200px;
  height: 200px;
  background: red;
  font-size: 20px;
}
</style>

子组件

<template>
  <div>
    <button @click="sendName">子组件的点击按钮,点击将数据传递给父组件</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      name: "son",
      sex: "nan",
    };
  },
  mounted() {},
  methods: {
    sendName() {
      this.$emit("getName", this.name);
    },
  },
};
</script>
<style lang='less' scoped>
</style>

运行的结果和上面通过props传递参数是同样的结果。

然后

<Son @getName="getName"></Son>

对于绑定事件我们还有一种更加灵活的写法:

<Son ref="son"></Son>
mounted() {
	this.$refs.son.$on("getName", this.getName);
},

当然这里我们可以直接写回调函数

mounted() {
	this.$refs.son.$on("getName", function() {}
	);
},
// 但是需要特别注意的是这里的this指向的是儿子,因为是儿子调用了getName函数
// 所以要让这个this指向父组件,那么需要将写为箭头函数() => {}

这样我们可以在绑定自定义事件的时候添加一些其它的逻辑,比如定时操作,执行其它函数等。
如果我们只需要执行一次

<Son @getName.once="getName"></Son>
	this.$refs.son.$on.$once("getName", this.getName);

如果我们需要传递多个参数:

 getName(obj) {
      // 首先我们可以传递一个对象,接收也是一个对象
    },
// 其次我们可以使用es6语法
 getName(name, ...parms) {
      // 第一个参数为name,其余的参数都在parms数组里面
    },

解绑事件

this.$off("getName");
// 如果解绑多个事件
this.$off(["event1", "event2"]);
// 解绑所有
this.$off();
```
### 特别注意
组件在绑定原生事件的时候需要@click.native修饰,否则它会被当做自定义事件。
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 10:40:34  更:2022-07-03 10:43:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/11 10:15:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码