本文实例为大家分享了Vuex实现记事本功能的具体代码,供大家参考,具体内容如下

首先:执行命令 安装Vuex

npm install vuex@next --save

在mian.js 中挂在vuex

import store from './store'
 
new Vue({
  store,
  render: h => h(App)
}).$mount('#app')

这里使用的 Ant Design UI :

npm install ant-design-vue --save

在 main.js 中完整引入

import Antd from 'ant-design-vue'
import 'ant-design-vue/dist/antd.css'
Vue.use(Antd)

App.vue中

<template>
  <div id="app">
    <div>
      <a-input placeholder="请输入任务" class="my_ipt" :value='inputVal'
      @change="handleInputChange"
      />
      <a-button type="primary" @click="addItem">添加事项</a-button>
 
      <a-list bordered :dataSource="infoList" class="dt_list">
        <a-list-item slot="renderItem" slot-scope="item">
          <!-- 复选框 -->
          <a-checkbox :checked='item.done' @change="changeItem(item.id,$event.target.checked)">{{ item.info }}</a-checkbox>
          <!-- 删除链接 -->
          <a slot="actions" @click="deleteItemById(item.id)">删除</a>
        </a-list-item>
 
        <!-- footer区域 -->
        <div class="footer" slot="footer">
          <span>{{unDoneNub}}条未完成</span>
          <a-button-group>
            <a-button :type="ViewType=='all'?'primary':''" @click="changeList('all')">全部</a-button>
            <a-button :type="ViewType=='undone'?'primary':''" @click="changeList('undone')">未完成</a-button>
            <a-button :type="ViewType=='done'?'primary':''" @click="changeList('done')">已完成</a-button>
          </a-button-group>
          <a @click="deleteDone">清除已完成</a>
        </div>
      </a-list>
    </div>
  </div>
</template>
<script>
import { mapState, mapGetters } from 'vuex'
export default {
  name: 'app',
  data () {
    return {
      // 模拟数据
      // list: []
    }
  },
  computed: {
    ...mapState(['list', 'inputVal', 'ViewType']),
    ...mapGetters(['unDoneNub', 'infoList'])
  },
  created () {
    this.$store.dispatch('getList')
  },
  methods: {
    handleInputChange (e) {
      console.log(e.target.value)
      // 拿到输入框的值  保存到vuex中
      this.$store.commit('setInputVal', e.target.value)
    },
    // 向列表中添加事项
    addItem () {
      if (this.inputVal.trim().length <= 0) {
        return alert('文本框不能为空')
      }
      // 向store中调用函数  来修改数据  不可以直接修改
      this.$store.commit('addItem')
    },
 
    // 删除
    deleteItemById (id) {
      // console.log(id);
      this.$store.commit('deleteItem', id)
    },
 
    // 改变状态
    changeItem (id, e) {
      console.log(id, e)
      // 通过id改变状态
      this.$store.commit('changeItem', id)
    },
 
    // 清除已完成
    deleteDone () {
      this.$store.commit('deleteDone')
    },
 
    changeList (type) {
      this.$store.commit('changeList', type)
    }
 
  }
}
</script>
<style scoped>
#app {
  padding: 10px;
  margin: 0 auto;
  display: flex;
  justify-content: center;
}
.my_ipt {
  width: 500px;
  margin-right: 10px;
}
.dt_list {
  width: 500px;
  margin-top: 10px;
}
.footer {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
</style>

store index.js 中

import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'
 
Vue.use(Vuex)
 
export default new Vuex.Store({
  state: {
    list: [],
    inputVal: '',
    id: 10,
    ViewType: 'all'
  },
  // 真正操作数据的地方
  mutations: {
    INITLIST (state, data) {
      state.list = data
    },
    setInputVal (state, data) {
      state.inputVal = data
    },
    addItem (state) {
      const obj = {
        id: state.id,
        info: state.inputVal.trim(),
        done: false
      }
      state.list.push(obj)
      state.id  
      state.inputVal = ''
    },
    // 删除已完成
    deleteDone (state) {
      state.list = state.list.filter(item => {
        return item.done != true
      })
    },
    deleteItem (state, id) {
      state.list = state.list.filter(item => {
        // console.log(item.id);
        return item.id != id
      })
    },
    // 改状态
    changeItem (state, id) {
      // 对应id的done值取反 先拿索引 根据索引 取反对应的状态  如果有多重状态 则需要参数传递
      const index = state.list.findIndex(item => {
        return item.id === id
      })
      if (index !== -1) {
        state.list[index].done = !state.list[index].done
      }
    },
    // 改变列表
    changeList (state, type) {
      state.ViewType = type
      state
    }
  },
  actions: {
    //模仿发送请求
    getList (content) {
      axios.get('./list.json').then(res => {
        console.log(res.data)
        content.commit('INITLIST', res.data)
      })
    }
 
  },
  modules: {
  },
  getters: {
    // 未完成的数量
    unDoneNub (state) {
      return (state.list.filter(item => {
        return item.done == false
      })).length
    },
    // 根据列表类型 过滤不同的展示列表
    infoList (state) {
      if (state.ViewType == 'all') {
        return state.list
      }
      if (state.ViewType == 'undone') {
        return state.list.filter(item => !item.done)
      }
      if (state.ViewType == 'done') {
        return state.list.filter(item => item.done)
      }
    }
  }
})

list.json

[
    {
        "id": 0,
        "info": "打篮球",
        "done": false
    },
    {
        "id": 1,
        "info": "打王者荣耀",
        "done": true
    },
    {
        "id": 2,
        "info": "学习",
        "done": false
    },
    {
        "id": 3,
        "info": "吃饭",
        "done": false
    },
    {
        "id": 4,
        "info": "睡觉",
        "done": false
    }
]

结果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持Devmax。

Vuex实现记事本功能的更多相关文章

  1. 一文详解Pinia和Vuex与两个Vue状态管理模式

    这篇文章主要介绍了一文详解Pinia和Vuex与两个Vue状态管理模式,Pinia和Vuex一样都是是vue的全局状态管理器。其实Pinia就是Vuex5,只不过为了尊重原作者的贡献就沿用了这个看起来很甜的名字Pinia

  2. uniapp中vuex的应用使用步骤

    Vuex是一个专为Vue.js应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化,下面这篇文章主要给大家介绍了关于uniapp中vuex的应用使用,需要的朋友可以参考下

  3. vue3中router路由以及vuex的store使用解析

    这篇文章主要介绍了vue3中router路由以及vuex的store使用解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  4. vuex中store存储store.commit和store.dispatch的区别及说明

    这篇文章主要介绍了vuex中store存储store.commit和store.dispatch的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  5. vuex中的state属性解析

    这篇文章主要介绍了vuex中的state属性,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  6. vue项目keepAlive配合vuex动态设置路由缓存方式

    vue项目keepAlive配合vuex动态设置路由缓存方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. 关于vuex状态刷新网页时数据被清空问题及解决

    这篇文章主要介绍了关于vuex状态刷新网页时数据被清空问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  8. Vuex详细介绍和使用方法

    本文详细讲解了Vuex和其使用方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  9. vuex页面刷新数据丢失问题的四种解决方式

    vuex是大家使用vue时大多数都会选择的,但是当页面刷新之后vuex数据会丢失,下面这篇文章主要给大家介绍了关于vuex页面刷新数据丢失问题的四种解决方式,需要的朋友可以参考下

  10. 详解Vuex的属性

    Vuex是专为Vue.js应用程序开发的状态管理模式,这篇文章主要介绍了Vuex的属性,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部