Vue 方法
在 Vue 组件中,方法 (Methods) 是定义在 <script setup> 内的函数,它们通常用于响应事件、执行计算或封装可复用的逻辑。这些方法可以被模板中的事件处理器调用,或者在组件的其他逻辑中使用。
定义方法
在 Vue 3 的组合式 API (Composition API) 中,我们直接在 <script setup> 块中声明函数即可。这些函数会自动暴露给模板使用。
vue
<script setup>
import { ref } from 'vue'
const name = ref('Vue.js')
// 定义一个方法
function greet() {
// 方法可以访问 <script setup> 作用域内的所有变量和函数
alert(`Hello, ${name.value}!`);
}
</script>
<template>
<!-- 在模板中通过 @click 事件调用这个方法 -->
<button @click="greet">Greet</button>
</template>在这个例子中:
- 我们定义了一个名为
greet的函数。 - 这个函数可以访问响应式变量
name。注意,在<script>部分访问ref创建的变量时,需要使用.value。 - 在模板中,我们使用
@click="greet"将按钮的点击事件绑定到greet方法上。当按钮被点击时,greet函数就会执行。
带参数的方法
方法可以接受参数。你可以在调用它们时传递静态值或动态数据。
vue
<script setup>
function say(message) {
alert(message)
}
</script>
<template>
<!-- 传递一个静态字符串 -->
<button @click="say('hello')">Say hello</button>
<!-- 传递一个动态变量 (假设 msg 是一个 ref 或其他变量) -->
<button @click="say(msg)">Say msg</button>
</template>事件对象
有时,你需要访问原生的 DOM 事件对象。你可以将特殊的 $event 变量传入一个方法中:
vue
<script setup>
function warn(message, event) {
// 现在我们可以访问原生事件对象
if (event) {
event.preventDefault()
}
alert(message)
}
</script>
<template>
<!-- 在这里,我们使用 $event 变量来传入原生的 DOM 事件 -->
<button @click="warn('Form cannot be submitted yet.', $event)">
Submit
</button>
</template>如果事件处理器是内联函数(一个箭头函数),事件对象也会被自动传入:
vue
<template>
<button @click="(event) => warn('Form cannot be submitted yet.', event)">
Submit
</button>
</template>方法与普通函数的区别
在组合式 API 的上下文中,“方法”这个术语更多是一种概念上的称呼,指的是那些为了响应事件或封装特定行为而创建的函数。从技术上讲,它们就是普通的 JavaScript 函数。
与 Vue 2 的选项式 API (Options API) 不同,在组合式 API 中,你不需要将方法定义在一个特定的 methods 对象里。你只需在 <script setup> 中声明函数,Vue 就会自动处理剩下的事情,使其在模板中可用。
这种方式提供了更大的灵活性,让你可以根据逻辑功能来组织代码,而不是被固定的选项结构所限制。