methods 方法
除了上面所讲解的方法之外,还有一类使用最多的对应配置式 API 中的 methods
类方法,这类方法主要结合模板中的一些回调事件使用,如示例代码 4-6-1 所示。
示例代码4-6-1 click 事件绑定 methods
<div id="app">
{{count}}
<button @click="add">点我+1</button>
</div>
Vue.createApp({
setup() {
const count = Vue.ref(0)
const add = ()=>{
count.value++
}
return { count,add }
}
}).mount("#app")
上面的代码中,在 setup
方法中返回了 add
方法,这样在模板中就可以进行绑定,当 click
事件触发时,会进入这个方法。
当结合配置式 API 使用时,如果在组件的 methods
中也配置了同名的方法,那么会优先执行 setup
中定义的,methods
中定义的方法将不会执行,代码如下:
Vue.createApp({
setup() {
const count = Vue.ref(0)
const add = ()=>{
count.value++
}
return { count,add }
},
methods:{
add(){} // 不会触发
}
}).mount("#app")
同样,在进行组件通信时,如果遇到同名的方法,则优先以 setup
中定义并返回的方法为主,如示例代码 4-6-2 所示。
示例代码4-6-2 同名 methods
<div id="app">
<component-b @add="add"/>
</div>
const componentB = {
template:'<div></div>',
setup(props,{emit}) {
emit('add') // 通知父组件
}
}
Vue.createApp({
components: {
'component-b': componentB
},
setup() {
const add = ()=>{
console.log('setup add')
}
return { add }
},
methods:{
add(){
console.log('methods add') // 不会触发
}
}
}).mount("#app")
上面的代码中,当子组件调用 emit
通知父组件时,会调用父组件 setup
方法中的 add
方法,而不会调用 methods
中定义的。