• Vuex 的项目实例7 修改完成状态


    需求的功能是:点击对应复选框,拿到最新的状态,再根据点击对应项的 id,把最新的状态,赋值到 list 数组中对应的 item 项。

    1、给复选框添加点击事件:

    <!--复选框-->
    <a-checkbox :checked="item.done" @click="checked(item.id)">
              {{item.info}}
    </a-checkbox>
    
    <script>
    export default {
      methods: {
        checked(id) {
          this.$store.commit('modiItem', id)
        }
      }
    }
    </script>

    2、在 store/index.js 中添加 modiItem:

    mutations: {
        // 根据 id 修改完成状态
        modiItem(state, id) {
          const index = state.list.findIndex(item => item.id === id)
         if (index !== -1) {
            state.list[index].done = !state.list[index].done
          }
        }
    }

    现在每次点击复选框时,取反它对应 id 项的 done 值。

    还可以监听复选框的状态改变,用 change

    1、监听复选框的状态改变:

    <a-checkbox :checked="item.done" @change="(e) => {cbStatusChanged(e)}">
              {{item.info}}
    </a-checkbox>
    
    <script>
    export default {
      methods: {
        // 监听复选框选中状态变化的事件
        cbStatusChanged(e) {
          console.log(e.target.checked)
        }
      }
    }
    </script>

    此时点击复选框,可以打印出最新的状态。比如点击第二项,那么打印出来的就是 true

    这时就可以拿到最新的选中状态值。

    下面我们需要把 id 也传递进去:

    <a-checkbox :checked="item.done"
             @change="(e) => {cbStatusChanged(e, item.id)}">
              {{item.info}}
    </a-checkbox>
    
    <script>
    export default {
      methods: {
        // 监听复选框选中状态变化的事件
        cbStatusChanged(e, id) {
          console.log(e.target.checked)
          console.log(id)
        }
      }
    }
    </script>

    2、定义一个参数对象:

    // 监听复选框选中状态变化的事件
        cbStatusChanged(e, id) {
          // 通过 e.target.checked 可以接收到最新的选中状态
          // console.log(e.target.checked)
          const param = {
            id: id,
            status: e.target.checked
          }
          this.$store.commit('changeStatus', param)
        }

    3、打开 store/index.js 文件,添加  changeStatus :

    mutations: {
        // 修改列表项的选中状态
        changeStatus(state, param) {
          const index = state.list.findIndex(item => item.id === param.id)
          if (index !== -1) {
            state.list[index].done = param.status
          }
        }
      }

    OK,完成效果都是一样的。

  • 相关阅读:
    Elasticsearch 技术分析(五):如何通过SQL查询Elasticsearch
    IntelliJ IDEA 2018.3 重大升级,哪些功能打动了你?
    终于有人把“TCC分布式事务”实现原理讲明白了!
    Elasticsearch 技术分析(一): 基础入门
    拜托!面试请不要再问我Spring Cloud底层原理
    一个正则表达式引发的血案
    程序员啊,他又加班了
    程序员你为什么这么累 | 编码规范
    全文搜索引擎 ElasticSearch 还是 Solr?
    TCP三次握手原理,你真的了解吗?
  • 原文地址:https://www.cnblogs.com/joe235/p/12742737.html
Copyright © 2020-2023  润新知