3:表单和事件
所有应用程序都需要允许用户对存储的数据执行某种类型的交互。在我们的例子中,我们需要的第一种交互类型是新任务。没有它,我们的待办事项应用程序将毫无用处。
用户在网站上插入或编辑数据的主要方法之一是通过表单。在大多数情况下,使用<form>
标签是一个好主意,因为它为其中的元素赋予了语义含义。
3.1:创建任务表单
首先,我们需要创建一个简单的表单组件来封装我们的逻辑。
在一个名为TaskForm.svelte
的文件中创建一个form
元素,并添加一个输入字段和一个按钮
imports/ui/TaskForm.svelte
<form class="task-form">
<input type="text" name="text" placeholder="Type to add new tasks" />
<button type="submit">Add Task</button>
</form>
3.2:更新应用程序
然后,我们可以简单地将这个新表单添加到我们的App.svelte
组件中,首先在<script/>
标签中导入它,然后在我们的<div />
中使用它
imports/ui/App.svelte
<script>
import { TasksCollection } from '../api/TasksCollection';
import Task from './Task.svelte';
import TaskForm from './TaskForm.svelte';
..
</script>
<div class="container">
<header>
<h1>Todo List</h1>
</header>
<TaskForm />
..
</div>
3.3:更新样式表
你也可以根据自己的意愿对其进行样式设置。目前,我们只需要在顶部添加一些边距,这样表单就不会显得偏离中心。添加CSS类.task-form
,这需要与表单组件中class
属性中的名称相同。
client/main.css
.task-form {
margin-top: 1rem;
}
3.4:添加提交监听器
现在我们需要向表单上的submit
事件添加一个监听器,并创建handleSubmit
函数,该函数实际上将插入我们的任务
imports/ui/TaskForm.svelte
<script>
import { TasksCollection } from '../api/TasksCollection';
let newTask = '';
const handleSubmit = () => {
// Insert a task into the collection
TasksCollection.insert({
text: newTask,
createdAt: new Date(), // current time
});
// Clear form
newTask = '';
}
</script>
<form class="task-form" on:submit|preventDefault={handleSubmit}>
<input
type="text"
name="text"
placeholder="Type to add new tasks"
bind:value={newTask}
/>
<button type="submit">Add Task</button>
</form>
此表单的输入标签将添加一个bind:value
属性,这将把输入的值绑定到newTask
属性。
接下来,handleSubmit
方法将添加到App
组件的脚本部分。为了在表单的提交事件上执行handleSubmit
函数,我们将向表单标签添加on:submit|preventDefault属性
此外,在你的task
文档中插入一个日期createdAt
,以便你了解每个任务的创建时间。
3.5:首先显示最新的任务
现在剩下的就是做最后一个更改:我们需要首先显示最新的任务。我们可以通过对我们的Mongo查询进行排序来快速实现这一点。
imports/ui/App.svelte
<script>
..
$m: tasks = TasksCollection.find({}, { sort: { createdAt: -1 } }).fetch()
</script>
..
现在你的应用程序应该如下所示
回顾:你可以查看你的代码在这一步结束时应该是什么样子这里
在下一步中,我们将更新你的任务状态,并为用户提供删除任务的方法。