store/Book/index.ts
export interface Book { title: string text: string } export const state = () => ( { books: [{ title:"title1",text:"abc" }] }) export const mutations = { add (state, book: Book) { state.books.push(book) }, all (state): Book[] { return state.books }, }
store/index.ts
export const state = () => ({ counter: 0 }) export const mutations = { increment (state) { state.counter++ }, } export const actions = { action_inc ( {commit} ) { commit('increment') },
pages/todo.vue
<template> <div> <ul> <!-- <li v-for="t in $store.state.Book.books"> --> <li v-for="t in books"> <span>{{ t.title }}</span> </li> </ul> <button @click="add_book">ADD</button> </div> </template> <script lang="ts"> // TS VER. import { Component, Vue, namespace } from 'nuxt-property-decorator' // import { Vue, Component, namespace } from 'vue-property-decorator' import { mapMutations, mapActions } from 'vuex' const StoreBook = namespace('Book') @Component({ }) export default class extends Vue { @StoreBook.Mutation add @StoreBook.Mutation all //------------------------------------------ // getter //------------------------------------------ private get cnt(): number { return this.$store.state.counter } private get books():[] { return this.$store.state.Book.books } //------------------------------------------ // mutation //------------------------------------------ clicked_inc(): void{ this.$store.commit('increment') } //------------------------------------------ // action //------------------------------------------ get_books():Object[]{ console.log("get_books" ) return this.all(); } add_book(el): void{ var b = { title:"title1",text:"abc" } this.add(b) } } </script> <style> .done { text-decoration: line-through; } </style>