Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >如何将json数据通过vuex渲染到页面上

如何将json数据通过vuex渲染到页面上

作者头像
玖柒的小窝
修改于 2021-11-08 01:39:37
修改于 2021-11-08 01:39:37
2.6K00
代码可运行
举报
文章被收录于专栏:各类技术文章~各类技术文章~
运行总次数:0
代码可运行

如何将json数据通过vuex渲染到页面上

  • 在store中导入axios
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import axios from 'axios'
复制代码
  • actions中执行异步操作,来将json数据拿到store中
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
actions: {
    getList(context) {
      axios.get('./list.json').then(({ data }) => {
        context.commit('initList', data)
      })
    }
  },
复制代码
  • 通过mutation将数据送到state中去
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
state: {
    // 所有的任务列表
    list: []
  },
  mutations: {
    initList(state, list) {
      state.list = list
    }
  },
复制代码
  • 在app.vue中按需导入
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { mapState } from 'vuex'
复制代码
  • 在页面加载时通过action获取数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
created() {
    this.$store.dispatch('getList')
  },
复制代码
  • 通过计算属性的方式将state中的list内容放到app.vue中
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
computed: {
    ...mapState(['list'])
  }
复制代码
  • 完成数据替换

如何使文本框输入内容后同步

  • 给state设置一个文本的存储
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
state: {
    // 文本框中的内容
    inputValue: 'aaa'
  },
复制代码
  • 属性绑定state的inputValue + 判断当文本框内容发生改变时,触发函数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a-input
      :value="inputValue"
      @change="handleInputChange"
    />
          
computed: {
    ...mapState(['list', 'inputValue'])
  },
复制代码
  • 通过函数来监听最新文本并通过mutation更新state数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
handleInputChange(e) {
      console.log(e.target.value)
      this.$store.commit('setInputValue', e.target.value)
}


mutations: {
    setInputValue(state, val) {
      state.inputValue = val
    }
  },
复制代码
  • 完成

如何完成添加按钮

  • 绑定click事件
  • 新增mutation函数用于执行操作
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
state: {
    // 下一个Id
    nextId: 5
  },
mutations: {
    addItem(state) {
      const obj = {
        id: state.nextId,
        info: state.inputValue.trim(),
        done: false
      }
      state.list.push(obj)
      state.nextId++
      state.inputValue = ''
    }
  },
复制代码
  • 调用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
addItemToList() {
      if (this.inputValue.trim().length <= 0) {
        return this.$message.warning('文本框内容不能为空')
      }

      this.$store.commit('addItem')
    }
复制代码
  • 完成

如何删除一条数据

  • 为删除按钮添加click事件,参数为当前数据的id
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a-list-item slot="renderItem" slot-scope="item">
        <a slot="actions" @click="removeItemById(item.id)">删除</a>
</a-list-item>
复制代码
  • 在mutation中写入删除函数
    • 寻找索引:当前索引是否等于当前id
    • 删除:元素,一个
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
removeItem(state, id) {
      // 根据Id查找对应项的索引
      const i = state.list.findIndex(x => x.id === id)
      // 根据索引,删除对应的元素
      if (i !== -1) {
        state.list.splice(i, 1)
      }
    }
复制代码

复选框默认状态绑定

  • 利用属性绑定使checked为true或者为false来进行同步
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a-checkbox :checked="item.done">{{ item.info }}</a-checkbox>
复制代码

复选框选中与取消

  • 为复选框绑定change事件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a-checkbox
          :checked="item.done"
          @change="(e) => {cdstatusChanged(e, item.id)}"
          >{{ item.info }}</a-checkbox>
复制代码
  • 在函数中拿到id和当前复选框的选中状态
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cdstatusChanged(e, id) {
      // 通过e.target.checked可以接受到最新的选中状态
      // console.log(e.target.checked)
      // console.log(id)
      const param = {
        id: id,
        status: e.target.checked
      }

      this.$store.commit('changeStatus', param)
    }
复制代码
  • 在mutation函数中将state的选中状态改变
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 修改列表项的选中状态
    changeStatus(state, param) {
      const i = state.list.findIndex(x => x.id === param.id)
      if (i !== -1) {
        state.list[i].done = param.status
      }
    }
复制代码

清除已完成任务

  • 绑定单击事件并初始化函数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a @click="clean">清除已完成</a>
// 清除已完成的任务
    clean() {
      this.$store.commit('cleanDone')
    }
复制代码
  • mutation中写入删除逻辑
    • filter可以将结果返回为一个新数组
    • 将所有done=false的结果变为一个数组并将原来的state.list代替
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 清除已完成的任务
    cleanDone(state) {
      state.list = state.list.filter(x => x.done === false)
    }
复制代码

按钮的高亮效果切换

  • 为要高亮的按钮绑定单击事件,并为每个事件设置不同的字符串
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a-button @click="changeList('all')" >全部</a-button>
<a-button @click="changeList('undone')" >未完成</a-button>
<a-button @click="changeList('done')" >已完成</a-button>
复制代码
  • 初始化单击函数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 修改页面上展示的列表数据
    changeList(key) {
      console.log(key)
      this.$store.commit('changeViewKey', key)
    }
复制代码
  • 向state中新增viewKey用来存储高亮显示的按钮并通过mutation来完成viewKey的切换
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
state: {
    viewKey: 'all'
  },
  mutations: {
    // 修改视图关键字
    changeViewKey(state, key) {
      state.viewKey = key
    }
  },
复制代码
  • 用外部引入的方式将viewKey搞到app.vue上
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    ...mapState(['list', 'inputValue', 'viewKey']),
复制代码
  • 当viewKey = 当前按钮的字符串时,type值变为primary,否则变为default,记住要属性绑定
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a-button
            :type="viewKey === 'all' ? 'primary' : 'default'"
            @click="changeList('all')"
            >全部</a-button
          >
          <a-button
            :type="viewKey === 'undone' ? 'primary' : 'default'"
            @click="changeList('undone')"
            >未完成</a-button
          >
          <a-button
            :type="viewKey === 'done' ? 'primary' : 'default'"
            @click="changeList('done')"
            >已完成</a-button
          >
复制代码

点击按钮切换状态条数

  • 因为数据源一直是list所以点按钮没有用
  • 所以只需要让list能够动态变化就可以了
  • 在getter中新增函数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
infolist(state) {
      if (state.viewKey === 'all') {
        return state.list
      }
      if (state.viewKey === 'undone') {
        return state.list.filter(x => !x.done)
      }
      if (state.viewKey === 'done') {
        return state.list.filter(x => x.done)
      }
      return state.list
    }
复制代码
  • 将state的list删除,取而代之的是新的Getters变化的list
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a-list bordered :dataSource="infolist" class="dt_list">


computed: {
    ...mapState(['inputValue', 'viewKey']),
    ...mapGetters(['unDoneLength', 'infolist'])
  },

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
前端成神之路-Vuex
Vuex是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间的数据共享
海仔
2021/05/06
1.4K0
Vuex+vue2+ElementUi实现TodoList
爱学习的前端歌谣
2024/05/30
820
Vuex+vue2+ElementUi实现TodoList
Vuex核心属性详解
安装vuex与vue-router类似,vuex是一个独立存在的插件,如果脚手架初始化没有选 vuex,就需要额外安装。
用户11097514
2024/05/31
960
Vuex核心属性详解
Vue状态管理——Vuex
  前面我们已经介绍过父子组件之间的通信方式,父组件通过prop向子组件传递数据,子组件通过自定义事件向父组件传递数据。然而,在实际项目中,经常会遇到多个组件需要访问同一数据的情况,且都需要根据数据的变化做出响应,而这些组件之间可能并不是父子组件这种简单的关系。在这种情况下,就需要一个全局的状态管理方案。在Vue开发中,官方推荐Vuex。   Vuex是一个专门为Vue.js应用程序开发的状态管理模式。它采用集中式存储来管理应用程序中所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex也被集成到了Vue的官方调试工具vue-devtools中,提供了诸如零配置的time-travel调试、状态快照导入/导出等高级调试功能。 下图所示为Vuex的工作原理图
别团等shy哥发育
2023/02/25
2.3K0
Vue状态管理——Vuex
Vuex 深入浅出超详细
Vuex 官网🔗: Vuex 是一个专为 Vue.js 应用程序设计的状态管理库,它提供了一种集中式管理 应用中的状态;
Java_慈祥
2024/08/10
1170
Vuex 深入浅出超详细
VueX-数组对象的双向数据绑定
Vuex不允许在组件内部直接修改共享数据,需要在mutations中修改数据,所以涉及到双向绑定不能使用v-model
小城故事
2023/03/10
7930
VueX-数组对象的双向数据绑定
vuex的学习
1.引入store直接 使用插值的方式 {{$store.state.count}}
biaoblog.cn 个人博客
2022/08/11
2730
10.Vuex组件中的mapState、mapGetters、mapMutations、mapActions等辅助函数
可以将所有的Mutation事件,写入到一个单独的文件中,然后通过常量来替代,可以方便开发者对项目中所有Mutation
全栈程序员站长
2022/09/01
1.3K0
了解Vuex状态管理模式的理解强化指南
Vuex是什么呢?它是Vue的状态管理模式,在使用vue的时候,需要在vue中各个组件之间传递值是很痛苦的,在vue中我们可以使用vuex来保存我们需要管理的状态值,值一旦被改变,所有引用该值的地方就会自动更新。是不是很方便,很好用呢?
桃翁
2019/11/22
1.2K0
vue知识点集合
vuex 是一个专门为vue.js 应用程序开发的状态管理模式。它采用集中式储存管理应用的所有组件的状态,并以响应的规则保证状态以一种可预测的方式发生变化
xyzzz
2020/12/20
5370
vuex
下面的代码当执行:this.add(10)时,由于...mapMutations在...mapActions的后面,因此,会执行mutation,而不会执行action!
hss
2022/02/25
8960
【Vue】数据通信——我们从组件通信说起
vue是数据驱动视图更新的框架, 所以对于vue来说组件间的数据通信非常重要。我们Vue数据通信就从组件通信开始说起。
DDGarfield
2022/06/23
3K0
【Vue】数据通信——我们从组件通信说起
真正掌握vuex的使用方法(七)----完结
之前的文章当中,我们把所有的数据都存放到了 vuex文件夹当中的store.js当中。但随着将来项目的复杂度增大,共享的状态越来越多,越来越复杂!在这个时候我们需要将状态根据功能来对其进行模块化,同时也是为了便于将来的维护,所以分开写会更好一些。 今天我们主要来学习一下module:状态管理器的模块化操作。 假如项目中包括两个模块,分别为广告模块与用户模块。 首先在src文件夹下新建一个vuex文件夹,然后在该文件夹下新建一个index.js文件用于生成Store对象。然后在vuex文件夹下新建adv与user文件夹,最后分别在这两个文件夹内创建一个index.js文件。如图
用户1272076
2019/03/26
4280
真正掌握vuex的使用方法(七)----完结
Vue3学习笔记(七)—— 状态管理、Vuex、Pinia
理论上来说,每一个 Vue 组件实例都已经在“管理”它自己的响应式状态了。我们以一个简单的计数器组件为例:
张果
2022/11/28
4K0
Vue3学习笔记(七)—— 状态管理、Vuex、Pinia
一文让你彻底搞懂 vuex,满满的干货
简单地讲:可以把多个组件都需要的变量全部存储到一个对象里面,然后这个对象放在顶层的 vue 实例中,让其他组件可以使用。这样多个组件就可以共享这个对象中的所有属性。
呆呆
2021/12/01
8810
Vuex 基础用法
Vuex 是专为 Vue.js 开发的状态管理模式,采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态可预测的方式发生变化
Cellinlab
2023/05/17
2530
Vuex 基础用法
Vuex初探——求和小案例
在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。
henu_Newxc03
2022/01/13
8790
Vuex初探——求和小案例
Vuex的简单入门
在src目录下新建个store文件夹,里面新建index.js 在index.js文件夹中创建Vuex实例
明知山
2020/09/03
3040
在 vue-4.5 中学习 vuex/超详细教程
基础目录结构:默认Vuex代码写在index中,modules模块化代码则放在Addition.js与Subition.js中;state、mutations、actions、getters均有两种调用方式
玖柒的小窝
2021/10/09
7030
在 vue-4.5 中学习 vuex/超详细教程
第十三章:vuex状态(数据)管理
概念:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化,可以用于组件之间的通信。
用户9184480
2024/12/13
1650
相关推荐
前端成神之路-Vuex
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验