對于Vue新手來說,可以嘗試完成一個簡單的TODO LIST應用程序。基于Vue的MVC架構模式,具有易讀易維護的代碼,以及相對簡單的數(shù)據管理與狀態(tài)控制方式。下面是該應用的詳細介紹。
1. 確定應用需求
TODO LIST應用的主要需求是創(chuàng)建、更新、刪除任務列表。我們可以使用一個簡單的表單來實現(xiàn)這些任務,并保存在本地存儲中。此外,我們還可以為任務添加日期、狀態(tài)等附加信息。
2. 設計數(shù)據模型
在編寫Vue應用程序之前,我們需要先設計數(shù)據模型,以便我們可以更好地組織任務列表。為此,我們首先需要定義存儲任務信息的數(shù)據結構。
```javascript
{
id: 1,
title: "task title",
createdAt: new Date(),
completed: false
}
```
在該數(shù)據結構中,我們管理四個屬性:ID,任務標題,創(chuàng)建時間以及任務的完成狀態(tài)。
3. 設計Vue組件
為了實現(xiàn)該應用,我們首先需要定義一些Vue組件。最基本的組件是TODO LIST組件,該組件從本地存儲中加載任務,并顯示任務的列表,允許用戶創(chuàng)建、更新和刪除任務。它包含以下幾個子組件:
- TODO Form:任務創(chuàng)建或更新表單組件。
- TODO Item:任務列表項組件。
- TODO List Header:列表標題組件。
4. 編寫Vue組件
首先,我們需要創(chuàng)建一個Vue實例,該實例用于管理所有的Vue組件。我們還需要在該實例中注冊所有的組件:
```javascript
Vue.component("todo-form", {
//TODO Form component definition...
});
Vue.component("todo-item", {
//TODO Item component definition...
});
Vue.component("todo-list-header", {
//TODO List Header component definition...
});
var app = new Vue({
el: "#app",
data: {
tasks: []
}
});
```
數(shù)據部分包含一個空的任務列表數(shù)組,當用戶在TODO FORM組件中添加或更新任務時,該數(shù)組會自動更新。
我們需要為每個組件編寫模板和樣式,并將這些組件串聯(lián)起來。接下來是具體的代碼實現(xiàn)。
- TODO List Header Component
列表頭部組件負責顯示列表的標題和任務數(shù)量信息。
```javascript
Vue.component("todo-list-header", {
props: ["title", "count"],
template: '
{{title}}
Number of Tasks: {{count}}
});
```
- TODO Item Component
任務列表項組件負責顯示單個任務并允許用戶更新或刪除該任務。
```javascript
Vue.component("todo-item", {
props: ["task"],
data: function() {
return {
editing: false,
title: ""
}
},
methods: {
editTask: function() {
this.editing = true;
this.title = this.task.title;
},
updateTask: function() {
if (this.title.trim() !== "") {
this.task.title = this.title;
this.$emit("update-task", this.task);
this.editing = false;
}
},
cancelEditing: function() {
this.editing = false;
this.title = "";
},
deleteTask: function() {
this.$emit("delete-task", this.task);
}
},
template: `
});
```
- TODO Form Component
TODO表單組件使用V-MODEL綁定每個表單布爾值以及保存按鈕點擊事件。該組件采用“addTodo”方法來添加任務。
```javascript
Vue.component("todo-form", {
props: ["tasks"],
data: function() {
return {
title: "",
date: ""
}
},
methods: {
addTodo: function() {
if (this.title.trim() !== "" && this.date.trim() !== "") {
var task = {
id: this.tasks.length + 1,
title: this.title,
createdAt: new Date(this.date),
completed: false
}
this.tasks.push(task);
localStorage.setItem("tasks", JSON.stringify(this.tasks));
this.title = "";
this.date = "";
}
}
},
template: `
});
```
- TODO List Component
TODO列表組件將以上所有組件連接在一起,負責顯示所有任務列表以及處理對任務的更改操作。
```javascript
Vue.component("todo-list", {
components: {
"todo-form": TodoForm,
"todo-item": TodoItem,
"todo-list-header": TodoListHeader
},
props: ["tasks"],
data: function() {
return {
searchTitle: "",
showCompleted: true
}
},
methods: {
search: function(task) {
if (this.searchTitle.trim() !== "") {
return task.title.toLowerCase().includes(this.searchTitle.toLowerCase());
} else {
return true;
}
},
updateTask: function(task) {
localStorage.setItem("tasks", JSON.stringify(this.tasks));
},
deleteTask: function(task) {
var index = this.tasks.indexOf(task);
if (index > -1) {
this.tasks.splice(index, 1);
localStorage.setItem("tasks", JSON.stringify(this.tasks));
}
}
},
computed: {
completedTasks: function() {
return this.tasks.filter(function(task) {
return task.completed;
});
},
filteredTasks: function() {
var self = this;
return this.tasks.filter(function(task) {
return (self.showCompleted || !task.completed) && self.search(task);
});
}
},
created: function() {
this.tasks = JSON.parse(localStorage.getItem("tasks")) || [];
},
template: `
Completed Tasks
{{task.title}}
});
```
5. 將組件渲染到HTML中
最后,我們需要將TODO LIST組件渲染到HTML中。
```html
```
6. 結論
通過從零開始編寫一個基于Vue的TODO LIST應用程序,我們可以深入了解Vue的基礎結構、組件通信、狀態(tài)管理等相關概念和原理,為我們以后的Vue開發(fā)打下堅實的基礎。此外,我們還可以通過不斷地實踐和嘗試,增加自己的經驗和充實知識。