[
{
key: '修改, 刪除做搜尋資料使用'
content: '待辦事項清單內容描述',
done: '紀錄事項是否已經做完'
}
]
export const state = {
count: 0,
todos: [
{ key: 0, content: 'vue.js 2.0', done: true },
{ key: 1, content: 'vuex 2.0', done: false },
{ key: 2, content: 'vue-router 2.0', done: false },
{ key: 3, content: 'vue-resource 2.0', done: false },
{ key: 4, content: 'webpack', done: false }
]
};
設計取 list 的函式,直接 return todos
export const getTodos = state => state.todos;
<template>
<div class="container">
<h2>Todo List:</h2>
<ul>
<!-- 使用 for render todos -->
<li v-for="(todo, index) in todos">
<!-- 提取 content 顯示 -->
{{ todo.content }}
</li>
</ul>
</div>
</template>
<script>
import { mapGetters, mapActions } from 'vuex'
export default {
computed: mapGetters({
// 使用取 list 的函式,將資料存在 todos
todos: 'getTodos',
}),
}
</script>
到這邊已經完成取得 todo list 的資料了。
<template>
<div class="container">
<h2>Todo List:</h2>
<div>
<!--
加一個 input 用來新增 todo
希望按 enter 也可以增加 todo
在 Vue 裡面要捕捉 "按鍵事件" 可以使用 @keyup.[鍵位碼]
加入 @keyup.enter(修飾) 也等於 @keyup.13
-->
<input
type="text"
placeholder="add Todo.."
v-model="newTodo"
@keyup.enter="actionAddTodo" />
<!-- 按鈕增加 todo -->
<button @click="actionAddTodo">add todo</button>
</div>
<ul>
<li v-for="(todo, index) in todos">
{{ todo.content }}
</li>
</ul>
</div>
</template>
<script>
import { mapGetters, mapActions } from 'vuex'
export default {
data() {
return {
newTodo: ''
}
},
computed: mapGetters({
todos: 'getTodos',
}),
methods: {
...mapActions([
'addTodo', // 方法一、先引入
]),
actionAddTodo () {
// 方法一、使用
// this.addTodo( this.newTodo );
// 這邊示範第二種方法,不需要先引入 action 可以直接呼叫(調用)。
// 使用 this.$store.dispatch( action(String), value );
this.$store.dispatch('addTodo', this.newTodo);
// 清除 data 中 input 的 value
this.newTodo = '';
}
}
}
</script>
export const addTodo = ({ commit }, newTodo) => {
// 直接將 newTodo 傳遞給 mutation
commit(types.ADD_TODO, newTodo);
}
// 這邊簡單做一個 todo 的流水 key
// 預設值是 todos 的長度
let todoKey = state.todos.length;
export const mutations = {
[types.ADD_TODO] (state, newTodo) {
// todos 是一個 Array 所以 push 一個同結構的 Object
state.todos.push({
key: todoKey, // 流水 key
content: newTodo, // 新 todo 的內容
done: false // 預設當然是未做完
});
// 流水 key +1
todoKey++;
},
}
完成了 CRUD 的 create & read
實作小範例入門 Vue & Vuex 2.0 - github 完整範例
使用 git checkout 切換每天範例。