Vue 3 + TypeScript 事件触发与数据绑定方法

Vue 3 + TypeScript 事件触发与数据绑定方法

事件绑定与触发 Vue 3 提供了多种方式绑定和触发事件,可以通过模板直接绑定或使用 setup 语法糖。

html 复制代码
<template>
  <button @click="handleClick">点击事件</button>
  <input @input="handleInput" v-model="inputValue" />
</template>

<script lang="ts" setup>
const handleClick = (event: MouseEvent) => {
  console.log('按钮被点击', event);
};

const inputValue = ref('');
const handleInput = (event: Event) => {
  console.log('输入值变化', inputValue.value);
};
</script>

自定义事件 子组件可以通过 defineEmits 定义并触发自定义事件,父组件监听这些事件。

html 复制代码
<!-- 子组件 ChildComponent.vue -->
<script lang="ts" setup>
const emits = defineEmits(['customEvent']);
const triggerEvent = () => {
  emits('customEvent', '传递的数据');
};
</script>

<!-- 父组件 -->
<ChildComponent @customEvent="handleCustomEvent" />

获取页面绑定数据 使用 refreactive 创建响应式数据,并通过模板或逻辑代码访问。

html 复制代码
<script lang="ts" setup>
const count = ref(0);
const state = reactive({ name: 'Vue 3' });

const updateData = () => {
  count.value++;
  state.name = 'Updated';
};
</script>

表单输入绑定 使用 v-model 实现双向数据绑定,支持多种表单元素。

html 复制代码
<input v-model="text" type="text" />
<textarea v-model="message"></textarea>
<select v-model="selected">
  <option value="A">A</option>
</select>

事件修饰符 Vue 提供了事件修饰符简化常见操作,如阻止默认行为或停止冒泡。

html 复制代码
<form @submit.prevent="onSubmit"></form>
<a @click.stop="doThis"></a>

生命周期事件 可以在生命周期钩子中执行操作,如 onMountedonUpdated

typescript 复制代码
import { onMounted } from 'vue';

onMounted(() => {
  console.log('组件已挂载');
});

键盘与鼠标事件 监听特定按键或鼠标事件,使用修饰符或手动检查键值。

html 复制代码
<input @keyup.enter="submit" />
<button @click.middle="middleClick">中键点击</button>

TS 类型定义 为事件处理函数和响应式数据提供类型注解,确保类型安全。

typescript 复制代码
interface User {
  name: string;
  age: number;
}

const user = reactive<User>({ name: '', age: 0 });
const handleEvent = (payload: User) => {
  console.log(payload.name);
};

以上方法涵盖了 Vue 3 和 TypeScript 中常见的事件触发与数据绑定场景,可根据具体需求选择合适的方式。

相关推荐
IVEN_9 分钟前
本地正常,Docker 怎么就空白:Next.js SSR 的 Alpine musl DNS 陷阱
前端·docker·next.js
凡人叶枫9 分钟前
Effective C++ 条款24:若所有参数皆须要类型转换,请为此采用 non-member 函数
linux·前端·c++·算法·嵌入式开发
用户8876654266311 分钟前
Web3 前端实时通信如何落地:从 SSE 订阅到行情、订单与账户状态更新
前端·react.js·web3
an3174214 分钟前
使用 LangGraph + DeepSeek 构建 AI 面试官:状态图设计与实践
前端·ai编程
代码不加糖15 分钟前
MessageChannel是什么,有什么使用场景?
前端·javascript
小小龙学IT18 分钟前
HTMX:让 HTML 重新成为前端核心的超轻量动态交互库
前端·html·交互
星栈19 分钟前
写 Makepad Demo 不难,难的是把它写成项目
前端·rust
用户0595401744620 分钟前
localStorage清除策略踩坑实录:一个过期的token让我排查了3小时
前端·css
Nanachi22 分钟前
跨框架的前端源码定位,再加上点LLM
前端
人无远虑必有近忧!42 分钟前
fetch请求图片报跨域
前端·javascript