使用VueCli3+TypeScript+Vuex一步步构建todoList的方法

使用VueCli3+TypeScript+Vuex一步步构建todoList

本文将带领大家了解使用VueCli3+TypeScript+Vuex来构建一个简单的todoList。

  1. 初始化项目

首先,在命令行中使用以下命令初始化项目:

vue create todoList

在安装过程中,可以选择Manually select features来手动选择需要安装的特性;也可以在需要的地方添加TypeScript的支持,在后面的过程中,我们将更详细地了解这些细节。

  1. 安装Vuex

安装Vuex的命令如下:

npm install vuex --save
  1. 创建store文件和模块

在src目录下创建一个store文件夹,再创建一个index.ts文件和一个modules文件夹,用于放置各个模块的ts文件。

在index.ts文件中,我们初始化了一个Store,并且引入了modules中的模块。

import Vue from 'vue'
import Vuex, { Store } from 'vuex'
import { state, mutations } from './modules/todo'

Vue.use(Vuex)

const store: Store<any> = new Vuex.Store({
  state,
  mutations
})

export default store

在modules文件夹中,我们创建了一个todo.ts文件,该文件包含了todoList所需要的状态、行为和其它逻辑。以下是示例代码:

import { MutationTree } from 'vuex'
import { TodoState } from '../definitions'

export const state: TodoState = {
  todos: [
    { id: 1, text: 'Learn TypeScript', completed: true },
    { id: 2, text: 'Learn Vue', completed: false }
  ]
}

const mutations: MutationTree<TodoState> = {
  // Add a new todo
  ADD_TODO (state, {text}) {
    state.todos.push({
      id: state.todos.length + 1,
      text,
      completed: false
    })
  },

  // Remove a todo
  REMOVE_TODO (state, {index}) {
    state.todos.splice(index, 1)
  },

  // Toggle todo completed
  TOGGLE_TODO_COMPLETED (state, {index}) {
    state.todos[index].completed = !state.todos[index].completed
  }
}

export default {
  state,
  mutations
}
  1. 创建组件

现在,我们可以开始创建todoList所需要的组件。以下是一个使用Vue单文件组件实现的示例。

<template>
  <div>
    <ul>
      <li v-for="(todo, index) in todos" :key="todo.id">
        <input type="checkbox" v-model="todo.completed" @change="toggleCompleted(todo, index)">
        <span :class="{ completed: todo.completed }">{{ todo.text }}</span>
        <button @click="remove(index)">Remove</button>
      </li>
    </ul>
    <input type="text" v-model="newTodo" @keyup.enter="add">
  </div>
</template>

<script lang="ts">
  import { Component, Vue } from 'vue-property-decorator'
  import { Todo } from '../definitions'

  @Component
  export default class ToDoList extends Vue {
    todos: Todo[] = this.$store.state.todos
    newTodo: string = ''

    add (): void {
      this.$store.commit('ADD_TODO', {text: this.newTodo})
      this.newTodo = ''
    }

    remove (index: number): void {
      this.$store.commit('REMOVE_TODO', {index})
    }

    toggleCompleted (todo: Todo, index: number): void {
      this.$store.commit('TOGGLE_TODO_COMPLETED', {index})
    }
  }
</script>
  1. 集成组件和store

为了正常使用store,我们需要在入口文件main.ts中引入store并挂载到Vue上。代码如下:

import Vue from 'vue'
import store from './store'

import ToDoList from './components/ToDoList.vue'

Vue.config.productionTip = false

new Vue({
  store,
  render: h => h(ToDoList)
}).$mount('#app')
  1. 示例说明

以下是一个关于如何使用VueCli3+TypeScript+Vuex构建与API交互的todoList示例。

首先,我们需要更新项目的dependencies,增加一些API调用所需的库。

npm install axios @types/axios --save

然后,我们需要添加一个新的store模块,用于处理API的调用。以下是示例代码:

import { ActionTree } from 'vuex'
import { Todo, TodoState } from '../definitions'
import axios from 'axios'

const BASE_URL: string = 'http://localhost:3000'

const actions: ActionTree<TodoState, any> = {
  fetchTodos ({ commit }): void {
    axios.get(`${BASE_URL}/api/todos`).then(({ data }) => {
      commit('SET_TODOS', data)
    })
  },

  addTodo ({ commit }, todo: Todo): void {
    axios.post(`${BASE_URL}/api/todos`, todo).then(({ data }) => {
      commit('ADD_TODO', data)
    })
  },

  removeTodo ({ commit }, todo: Todo): void {
    axios.delete(`${BASE_URL}/api/todos/${todo.id}`).then(() => {
      commit('REMOVE_TODO', {id: todo.id})
    })
  },

  toggleCompleted ({ commit }, todo: Todo): void {
    axios.patch(`${BASE_URL}/api/todos/${todo.id}`, todo).then(() => {
      commit('TOGGLE_TODO_COMPLETED', {id: todo.id})
    })
  }
}

export default actions

接着,我们需要更新组件代码以引用API调用。以下是示例代码:

<script lang="ts">
  import { Component, Vue } from 'vue-property-decorator'
  import { Todo } from '../definitions'

  @Component
  export default class ToDoList extends Vue {
    todos: Todo[] = []

    created (): void { this.fetchTodos() }

    async fetchTodos (): Promise<void> {
      await this.$store.dispatch('fetchTodos')
      this.todos = this.$store.state.todos
    }

    add (): void {
      const todo: Todo = { text: this.newTodo, completed: false }
      this.$store.dispatch('addTodo', todo).then(() => {
        this.newTodo = ''
      })
    }

    remove (todo: Todo): void {
      this.$store.dispatch('removeTodo', todo)
    }

    toggleCompleted (todo: Todo): void {
      this.$store.dispatch('toggleCompleted', todo)
    }
  }
</script>

这些代码将使用API实现了get、post、delete和patch方法,从而和后端建立了交互,并使用vuex的action处理异步调用。

  1. 总结

以上就是使用VueCli3+TypeScript+Vuex构建todoList的攻略,通过无缝集成API调用的示例,你应该可以更加深入地了解Vue+TypeScript+Vuex的开发实践。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用VueCli3+TypeScript+Vuex一步步构建todoList的方法 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue中使用localstorage来存储页面信息

    当使用Vue构建单页应用程序时,使用localStorage来存储页面信息是一种常见的做法。localStorage是一个API,可以将数据永久存储在浏览器中,即使用户关闭了浏览器,数据也不会丢失。以下是Vue中使用localStorage来存储页面信息的完整攻略,包含两条示例说明。 使用localStorage存储数据 要在Vue中使用localStora…

    Vue 2023年5月28日
    00
  • vue实现的下拉框功能示例

    下面给出“vue实现的下拉框功能示例”的完整攻略。 1. 简介 Vue是一种流行的JavaScript框架,可使您轻松构建前端应用程序。Vue主要关注UI的呈现和交互,适用于单页面应用程序。其中下拉框是前端开发中常使用的组件,Vue框架提供了一些用于实现下拉框的组件和指令,我们可以利用这些组件和指令来快速构建一个能够满足不同需求的下拉框。 2. 实现流程 下…

    Vue 2023年5月27日
    00
  • vue日期时间工具类详解

    Vue日期时间工具类详解 什么是Vue日期时间工具类 Vue日期时间工具类是一个方便的工具,用于在Vue项目中处理日期时间相关的任务。它提供了许多便捷的方法,比如获取当前时间、格式化日期时间、计算时间差等等。Vue日期时间工具类可以大大简化处理日期时间的过程,减少开发者的工作量。 如何安装Vue日期时间工具类 首先,我们需要使用npm来安装Vue日期时间工具…

    Vue 2023年5月28日
    00
  • 详解Vue中的基本语法和常用指令

    详解Vue中的基本语法和常用指令 Vue的基本语法 Vue.js是一个用于构建交互式Web界面的渐进式JavaScript框架。其中,最基本的语法就是Vue实例。创建Vue实例时,需要提供一个JavaScript对象作为参数,这个对象称之为“选项对象”。 选项对象有很多属性,其中最重要的是data属性。data属性中定义了Vue实例中用到的数据。例如下面这个…

    Vue 2023年5月27日
    00
  • vue项目中实现多文件上传功能实例代码

    下面是“vue项目中实现多文件上传功能实例代码”的完整攻略: 实现思路 在 Vue 项目中实现多文件上传功能,需要联合使用 HTML5 的 FileReader API 和 axios 来实现。实现思路如下: 通过 input 标签接收用户上传的文件。 把文件列表存储到 vue 组件的 data 中,通过 v-for 循环来渲染上传列表。 使用 FileRe…

    Vue 2023年5月28日
    00
  • vue的插槽原来该这样理解

    当我们在开发Vue组件时,有些情况下需要动态地处理组件内部的内容。Vue提供了插槽( Slot )来解决这个问题。通过使用插槽,我们可以将父组件中的任意内容插入子组件中的指定位置,从而实现一种非常灵活的组件封装和组合方式。 一、插槽的用法和基本原理 1.1 插槽基础使用 插槽的基本原理是以 标签作为承载位置,用于显示父组件中传递过来的内容。 下面是一个例子:…

    Vue 2023年5月29日
    00
  • Vue子组件内的props对象参数配置方法

    下面将详细讲解“Vue子组件内的props对象参数配置方法”的完整攻略。 一、props对象简介 在Vue中,组件的数据流动一般是自上而下的,即父组件向子组件传递数据,子组件只能通过父组件传递过来的props属性接收数据,并且无法在子组件内修改这些属性的值。props属性是允许在父组件中指定的自定义特性,在模板中使用时,它需要和 v-bind 指令一起使用。…

    Vue 2023年5月27日
    00
  • 在Vue中使用Avue、配置过程及实际应用小结

    在Vue中使用Avue Avue是一款基于Vue和Element-UI的UI框架,提供了诸如表单验证、表格显示、图表展示等丰富的组件和模板,能够大大简化前端开发人员的开发工作。 配置过程 安装Avue 在项目根目录下使用终端输入以下命令安装Avue: npm install avue-cli –save-dev 添加依赖 在main.js中添加以下代码引入…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部