1.请使用Vue options API 中的setup函数实现一个点击按钮后数字自增的组件,要求: (1)可以给该组件设置默认的初始值 (2)点击按钮后对外抛出change事件并附带当前最新值 (3)该组件的父组件可调用该组件的reset方法将数字还原至初始值 (4)以上功能只允许在setup中实现
时间: 2024-02-01 12:14:35 浏览: 79
vue3中Options API(学习)代码
以下是实现方案:
```html
<template>
<div>
<button @click="increment">{{ count }}</button>
</div>
</template>
<script>
import { ref, onMounted } from 'vue';
export default {
props: {
initCount: {
type: Number,
default: 0
}
},
setup(props, { emit }) {
const count = ref(props.initCount);
function increment() {
count.value++;
emit('change', count.value);
}
function reset() {
count.value = props.initCount;
emit('change', count.value);
}
onMounted(() => {
emit('change', count.value);
})
return {
count,
increment,
reset
};
}
};
</script>
```
使用方式:
```html
<template>
<div>
<counter :initCount="10" @change="handleChange" ref="counter"></counter>
<button @click="reset">Reset</button>
</div>
</template>
<script>
import Counter from './Counter.vue';
export default {
components: {
Counter
},
methods: {
handleChange(value) {
console.log('Current value:', value);
},
reset() {
this.$refs.counter.reset();
}
}
};
</script>
```
以上代码中,使用了 Vue 3 的 Options API 中的 `setup` 函数,该函数返回一个对象,包含需要在模板中使用的数据和方法。使用 `ref` 函数创建了一个响应式变量 `count`,并定义了 `increment` 和 `reset` 方法来实现数字自增和重置的功能。在 `increment` 方法中,通过 `emit` 函数向父组件抛出了 `change` 事件,并附带当前最新值。在 `reset` 方法中,将 `count` 的值还原至初始值,并同样抛出 `change` 事件。同时,在组件挂载完成后也抛出了一次 `change` 事件,以便父组件可以获取到初始值。
在父组件中,通过使用 `Counter` 组件,并传入 `initCount` 属性来设置初始值,同时监听 `change` 事件来获取当前最新值。点击 `Reset` 按钮时,调用 `Counter` 组件的 `reset` 方法来重置数字并抛出 `change` 事件。
阅读全文