Vuex的学习-3

news2024/10/5 18:53:51

基于Vuex的案例todos,篇幅有点长,可以根据目录将会的地方可以跳过


初始化项目

1.通过vue ui 命令打开可视化面板,创建新项目

2.安装vuex依赖包

3.实现Todos基本布局 

课程代码在此,直接复制即可

main.js

import Vue from 'vue'
import App from './App.vue'

// 1、导入ant-design-vue 组件库
import Antd from 'ant-design-vue'

// 2、导入组件库的样式表
import 'ant-design-vue/dist/antd.css'

Vue.config.productionTip = false
// 3、安装组件库
Vue.use(Antd)

new Vue({
  render: h => h(App)
}).$mount('#app')

app.vue

<template>
  <div id="app">
    <a-input placeholder="请输入任务" class="my_ipt" />
    <a-button type="primary">添加事项</a-button>

    <a-list bordered :dataSource="list" class="dt_list">
      <a-list-item slot="renderItem" slot-scope="item">
        <!-- 复选框 -->
        <a-checkbox>{{ item.info }}</a-checkbox>
        <!-- 删除链接 -->
        <a slot="actions">删除</a>
      </a-list-item>

      <!-- footer区域 -->
      <div class="footer" slot="footer">
        <span>0条剩余</span>
        <a-button-group>
          <a-button type="primary">全部</a-button>
          <a-button>未完成</a-button>
          <a-button>已完成</a-button>
        </a-button-group>
        <a>清除已完成</a>
      </div>
    </a-list>
  </div>
</template>
<script>
export default {
  name: 'app',
  data () {
    return {
      list: [
        {
          id: 0,
          info: 'Racing car sprays burning fuel into crowd.',
          done: false
        },
        {
          id: 1,
          info: ' Japanese princess to wed commoner.',
          done: false
        },
        {
          id: 2,
          info: 'Australian walks 100km after outback crash.',
          done: false
        },
        {
          id: 3,
          info: 'Man charged over missing wedding girl.',
          done: false
        },
        {
          id: 4,
          info: 'Los Angeles battles huge wildfires.',
          done: false
        }
      ]
    }
  }
}
</script>
<style scoped>
#app {
  padding: 10px;
}
.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>

打开任务,运行项目

便于观看,做了一点小小的修改

到此todos的基本布局已经完成

4.请求数据

4.1新建json文件

在public新建一个list.json文件,将App.vue里面的list数据剪贴至list.json,修改一下格式就不会报错了

4.2引入axios

4.3发起数据请求

可以看到异步请求是OK的

4.4挂载数据

然后将请求回来的数据挂载到state里面进行存储

 在actions中不能给list重新赋值,只能调用mutations为state中的数据重新赋值

可以看到调用前是没有数据的

进行调用之后,可以看到state中的list数组

此时,数据的请求已经完成了

5.渲染数据

打开App.vue文件

按需导入函数,将当前组件需要的全局数据,映射为当前组件的 computed 计算属性 

已经在页面成功渲染

6.文本框的双向同步

6.1定义数据节点

在state中定义一个新的数据节点,设置文本框的默认值

6.2绑定文本框

将设置的inputValue与文本框绑定

此时可以看到,文本框的值已经变成设置的默认值了

给input添加一个监听事件

此时已经将文本框最新的值打印出来

但是还无法实现同步

在mutations中设置,为inputValue赋值

7.添加事项

7.1添加点击事件

给button添加点击事件,在添加一个非空判断

7.2添加列表项

在mutations中添加列表项

这里的newId应该是6

this.$message.warning(‘xxx’)

这个函数是由 Antd 组件库提供的函数,会在this上绑定这个$message函数;

然后通过$store.commit调用mutataions

7.3运行

8.删除事项

8.1添加点击事件

8.2根据id删除任务事项

newId定义数量根据自己现有的Id数加一,否则这里删除时打印id会重复

不影响删除的结果

9.复选框状态绑定

9.1手动改结果

在list.json中挑几个将“done"的这一项的false改为true

已经可以在state的list数组中看到

9.2与复选框绑定

将上面done的结果,true和false与复选框做绑定

10任务状态功能

10.1监听复选框事件

10.2传参

此时已经可以接收到复选框的最新选中状态,也拿到了要修改的这一项的id

然后来定一个参数对象

10.3调用

先const了一个param对象,然后通过commit来调用changeStatus事件,并将param对象进行传参

11.统计未完成个数 

此时需要用到Getters,在index.js中新增一个getters

调用

再用插值表达式将上面的0替换掉

12.清除已完成

注册点击事件并绑定

13.底部栏的高亮切换

找到底部操作按钮

13.1注册点击事件,并在控制台打印


13.2触发对应mutations

将组件中的每一个数据存储在store中,

在state中定义一个数据节点 viewKey,

设置它默认值为 allDone,展示所有的数据

然后将拿到的最新的viewKey值赋到viewKey上,此时会触发对应的mutations

通过this.$store.commit( )来触发定义的mutations,然后将形参里面接收到的key值赋过去

在mutations中新增这个函数,接收两个形参 state 和 key

state.viewKey的值就等于传过来的 key 值

当点击 “全部”、“未完成”、“已完成”时,会出现对应的 key 值

13.3修改高亮样式

14.实现列表按需切换

不需要在页面上展示完整的数据,所以来对viewKey的值进行判断

是三者中的哪一个,然后返回对应的数据,可以通过filter来得到

最后用Getters中的infoList将list替换掉(在mapState中也可以不用将list映射出来)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1326520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Seata中AT模式的实现原理02-RM分支事务提交

前言 RM是资源的管理者 处理分支事务的开启和提交回滚 当TM注册完全局事务之后进行分支事务的提交 RM一阶段处理本地事务&#xff0c;主要是在DataSource、Connection、Statement上做文章。 DataSource 创建 项目启动的时候SeataAutoDataSourceProxyCreator为所有DataSource…

通讯录应用程序开发指南

目录 一、前言 二、构建通讯录应用程序 2.1通讯录框架 (1)打印菜单 (2) 联系人信息的声明 (3)创建通讯录 (4)初始化通讯录 2.2功能实现 (1)增加联系人 (2)显示联系人 (3)删除联系人 (4)查找联系人 (5)修改联系人 (6)排序联系人 三、通讯录的优化 3.1 文件存储 …

RUST与RUSTful简介

RUST与RUSTful 1、背景2、RUST的起源3、RUST与RUSTful4、总结 1、背景 随着互联网&#xff08;Internet&#xff09;的发展&#xff0c;越来越多的人开始意识到&#xff0c;网站即软件&#xff0c;而且是一种新型的软件。这种"互联网软件"采用客户端/服务器&#xff…

el-table设置默认选中报错_this.$refs.singleTable.toggleAllSelection is not a function

直接使用以下的方法&#xff0c;报错信息是_this.$refs.singleTable.toggleAllSelection is not a function this.$refs.singleTable.toggleAllSelection()看了网上的解决方法&#xff0c;加了this.$nextTick,代码如下&#xff0c;但还是报错Error in nextTick: "TypeErr…

ubuntu部署llama2-chinese

ubuntu上安装cuda见之前的blog&#xff0c;已安装cuda12&#xff0c;使用nvcc-V 下载llama2-chinese&#xff1a;GitHub - FlagAlpha/Llama2-Chinese: Llama中文社区&#xff0c;最好的中文Llama大模型&#xff0c;完全开源可商用 conda create -n llamachinese python3.10 pi…

构建高效的研发管理体系

目录 一、什么是研发管理体系 二、研发管理体系有哪些 1、 基于CMMI的研发体系 ​2、基于IPD的研发体系 3、 基于敏捷模式的研发体系 三、研发管理的痛点 四、如何构建高效的研发管理体系 一、什么是研发管理体系 研发管理就是在研发体系结构设计的基础之上&#xff0…

[网络安全]在win2000虚拟机上创建隐藏账户

目录 1.winR->cmd->regedt32 2.新建账号&#xff0c;例如HiddenAccount$($表示在命令行下不现实此用户&#xff09; 3.winR->cmd->regedit 3.将HiddenAccount$删掉 4.最后一步 手工创建隐藏账户 1.你需要一台win2000 2.winR->cmd->regedt32 增加HEY_LOAC…

3A服务器 (hcia)

原理 认证&#xff1a;验证用户是否可以获得网络访问权。 授权&#xff1a;授权用户可以使用哪些服务。 计费&#xff1a;记录用户使用网络资源的情况 实验 步骤 1.配置ip地址 2.配置认证服务器 aaa authentication-scheme datacom&#xff08;认证服务器名字&#xf…

21 Vue3中使用v-for遍历对象数组

概述 使用v-for遍历对象数组在真实的开发中也属于非常常见的用法&#xff0c;需要重点掌握。 因为目前流行的是前后端分离开发&#xff0c;在前后端分离开发中&#xff0c;最常需要处理的就是对象数组类型的数据了。 比如&#xff0c;将员工信息渲染到表格中。 这节课我们就…

如何建立一套完整的私域运营体系?

所有人都告诉你&#xff0c;今年必须做私域&#xff0c;但从没有人说清楚怎么做私域。你以为做私域就像瑞星咖啡一样&#xff0c;随便拉个群、发发券就能年入100个小目标。或者你认为最后还是微商最有效&#xff0c;每天狂刷100条朋友圈。但这样的私域一定活不过30天。因为没有…

回顾丨2023 SpeechHome 第三届语音技术研讨会

下面是整体会议的内容回顾&#xff1a; 18日线上直播回顾 18日上午9:30&#xff0c;AISHELL & SpeechHome CEO卜辉宣布研讨会开始&#xff0c;并简要介绍本次研讨会的筹备情况以及报告内容。随后&#xff0c;CCF语音对话与听觉专委会副主任、清华大学教授郑方&#xff0c…

oracle定位造成卡顿的SQL语句

先查询阻塞的会话号 select event,machine,sql_id,program,blocking_session from dba_hist_active_sess_history where SAMPLE_TIME between TO_TIMESTAMP (2021-08-25 15:25:00, YYYY-MM-DD HH24:MI:SS) and TO_TIMESTAMP (2021-08-25 15:30:00, YYYY-MM-DD HH24:MI:SS) and …

【Linux】进程周边006之进程地址空间

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.程序地址空间 1.1验证地址…

Git 储藏(stash)用法

储藏的基本用法 保存当前的更改 1、查看储藏 git stash list2、更改保存到一个储藏中&#xff1a; git stash save "info"其中&#xff0c;“info” 是可选的注释信息&#xff0c;可以简要描述这个储藏的内容。 3、恢复之前保存的更改 可以使用下面的命令将之前…

Qt之判断一个点是否在多边形内部(射线法)

算法思想: 以被测点Q为端点,向任意方向作射线(一般水平向右作射线),统计该射线与多边形的交点数。如果为奇数,Q在多边形内;如果为偶数,Q在多边形外。计数的时候会有一些特殊情况。这种方法适用于任意多边形,不需要考虑精度误差和多边形点给出的顺序,时间复杂度为O(n)…

Java 第14章 集合 课堂练习

文章目录 HashSet判断是否两次add都能加入成功HashSet编码遍历HashMap判断输出中是否有"abc" HashSet判断是否两次add都能加入成功 HashSet set new HashSet(); set.add(new String("hsp")); set.add(new String("hsp"));第一次可以&#xff0…

HTML期末复习,重要知识点摘录

HTML复习知识点摘录 1.html基本模板 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body><h1>我的第一个标题</h1> <p>我的第一个段落。…

Docker 文件和卷 权限拒绝

一 创作背景 再复制Docker影像文件或访问Docker容器内已安装卷上的文件时我们常常会遇到&#xff1a;“权限被拒绝”的错误&#xff0c;在此&#xff0c;您将了解到为什么会出现“权限被拒绝”的错误以及如何解决这个问题。 二 目的 在深入探讨 Docker 容器中的 Permission De…

如何使用Docker搭建青龙面板并结合内网穿透工具发布至公网可访问

文章目录 一、前期准备本教程环境为&#xff1a;Centos7&#xff0c;可以跑Docker的系统都可以使用。本教程使用Docker部署青龙&#xff0c;如何安装Docker详见&#xff1a; 二、安装青龙面板三、映射本地部署的青龙面板至公网四、使用固定公网地址访问本地部署的青龙面板 正文…

TikTok获客工具开发必不可少的功能!

随着TikTok在全球范围内的走红&#xff0c;越来越多的企业开始关注这个平台并尝试从中获取客户&#xff0c;为了满足这一需求&#xff0c;市场上涌现出了许多TikTok获客工具。 这些工具的功能各有千秋&#xff0c;但有一些功能是必不可少的&#xff0c;本文将为您介绍TikTok获…