全部设置为仅查看/可编辑【第二种方法:watch+methods】

复制代码
<template>
  <div class="my-radio">
    <ul>
      <li v-for="item in list" :key='item.id'>
        <div class="name">
          <span>{{item.userName}}</span>
        </div>
        <van-radio-group v-model="item.operationType" direction="horizontal">
          <van-radio :name="1">仅查看
            <template #icon="props">
              <div :class="props.checked ? 'activeIcon' : 'inactiveIcon'"><span></span></div>
            </template>
          </van-radio>
          <van-radio :name="2">可编辑
            <template #icon="props">
              <div :class="props.checked ? 'activeIcon' : 'inactiveIcon'"><span></span></div>
            </template>
          </van-radio>
        </van-radio-group>
      </li>
    </ul>
    <div class="set-all">
      <van-checkbox v-model='allReadonly' @click="handleAllReadonly">全部设置为仅查看
        <template #icon="props">
          <div :class="props.checked ? 'activeIcon' : 'inactiveIcon'"><span></span></div>
        </template>
      </van-checkbox>
      <van-checkbox v-model='allEditable' @click="handleAllEditable">全部设置为可编辑
        <template #icon="props">
          <div :class="props.checked ? 'activeIcon' : 'inactiveIcon'"><span></span></div>
        </template>
      </van-checkbox>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      list: [
        {
          id: 266,
          operationType: 2,
          userName: 'brandotest3'
        },
        {
          id: 267,
          operationType: 1,
          userName: 'brandotest4'
        },
        {
          id: 268,
          operationType: 2,
          userName: 'brandotest5'
        },
        {
          id: 269,
          operationType: 2,
          userName: 'brandotest6'
        }
      ],
      allReadonly: false,
      allEditable: false
    }
  },
  methods: {
    handleAllReadonly() {
      this.list.forEach((item) => {
        this.$set(item, 'operationType', 1)
      })
      this.allReadonly = true
      this.allEditable = false
    },
    handleAllEditable() {
      this.list.forEach((item) => {
        this.$set(item, 'operationType', 2)
      })
      this.allReadonly = false
      this.allEditable = true
    }
  },
  watch: {
    list: {
      handler(newList) {
        const arr = newList.map((item) => item.operationType)
        const allReadonly = arr.every((item) => item === 1)
        const allEditable = arr.every((item) => item === 2)
        if (allReadonly) {
          this.allReadonly = true
        } else if (allEditable) {
          this.allEditable = true
        } else {
          this.allReadonly = false
          this.allEditable = false
        }
      },
      deep: true,
      immediate: true
    }
  }
}
</script>
复制代码

没有使用van-radio-group,将v-model直接绑定到van-checkbox,通过watch可以监听到list的变化从而改变底部两个按钮的状态。

但是底部两个按钮的状态需要添加点击事件去改变list中的状态

 

posted @   吴小明-  阅读(83)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示