这样输入框和按钮只能完成一次,我要这两个一直存在并且实现添加新的帖子。
时间: 2024-12-10 21:38:55 浏览: 11
如果你想让输入框和按钮始终保持在页面上,并且能够连续添加新帖子,你可以修改`handlePost`函数的逻辑,让它不再清空`inputContent`。以下是修改后的示例:
```javascript
<template>
... // 原始模板保持不变
<!-- 添加一个状态变量isPosting,用于标识是否正在添加新帖 -->
<script setup>
import { ref } from 'vue';
const list = ref([
...
]);
const inputContent = ref('');
const isPosting = ref(false);
const handlePost = async () => {
if (!inputContent.value.trim() || isPosting.value) return; // 防止同时提交
try {
isPosting.value = true; // 设置为正在添加
await delay(300); // 模拟异步操作,这里可以用Promise.resolve()替换,实际项目中可能是AJAX请求
// 创建新帖子对象并添加到list
const newPost = {
id: list.value.length + 1,
author: '作者名',
src: '/static/5.jpg', // 使用默认值或获取用户选择
name: inputContent.value
};
list.value.push(newPost);
// 提交完成后,清除输入并恢复非忙碌状态
inputContent.value = '';
isPosting.value = false;
} catch (error) {
uni.showToast({ title: '添加失败,请稍后再试', icon: 'none' });
}
};
// 延迟函数,用于模拟异步过程
function delay(time) {
return new Promise(resolve => setTimeout(resolve, time));
}
</script>
... // 原始样式保持不变
</template>
```
在这个版本中,我引入了一个名为`isPosting`的新状态变量,当用户点击“发表”按钮时,如果`inputContent`为空或者`isPosting`已经设置为`true`(即已有添加请求正在进行),则不会做任何动作。当用户开始添加新帖子时,`isPosting`会被设置为`true`,防止多次同时发送请求。
这样,输入框和按钮就会持续存在,并且用户可以在任何时候继续添加新的帖子。如果你有实时更新列表的需求,还可以考虑将列表渲染成动态组件,以便于实时同步变化。
阅读全文