vue list列表全选,单选 ,翻页功能

<template>
  <div class="searchItem">
    <div>
      <el-checkbox
        :indeterminate="indeterminate"
        :value="checkedAll"
        @change="onCheckAllChange"
        >本页全选</w-checkbox
      >
      <span><el-button>批量下载</el-button></span>
      <span><el-button>全部下载</el-button></span>
    </div>
    <div
      v-for="(item, idx) in msgList"
      :key="item.msgCode"
    >
      <div>
        <div>
          <el-checkbox
            :key="item.msgCode"
            :value="setOfCheckedId.includes(item.msgCode)"
            @change="onItemChecked($event, item.msgCode)"
          ></el-checkbox>
        </div>
        <div>
          <div>
            <span>{{ item.title }}</span>
          </div>
          <p class="content">{{ item.content }}</p>
        </div>
      </div>
    </div>
    <div class="pageDiv">
      <w-pagination
        style="float: right"
        background
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="pageNo"
        :page-sizes="[10, 20, 50, 100]"
        :page-size="10"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total"
      >
      </w-pagination>
    </div>
  </div>
</template>
<script>
export default {
  data () {
    return {
      msgList: [
        {
          msgCode: 1,
          title: '天津一小区爆炸:楼体损毁严重',
          content:
            '7月19日7时15分许,天津市北辰区天穆镇欢颜里一老旧小区发生燃气爆燃,造成楼体受损,有群众被困。事故造成11人受伤,均无生命危险。经过四个多小时的紧张救援,有1人被成功救出,另1人正在全力救援中。此外,还有3名人员失联。接报后,市委书记李鸿忠,市委副书记、市长张工立即作出批示并赶赴现场,要求市应急局、北辰区迅即全力组织救援,把救人放在第一位,千方百计解救被困人员,严格加强现场安全警戒,切实防止次生事故发生。',
        },
        {
          msgCode: 2,
          title: '天津一小区爆炸:楼体损毁严重',
          content:
            '2022年7月19日7时15分许,在北辰区天穆镇欢颜里3号楼,一居民家中发生燃气爆燃,造成楼体受损。目前,现场有8人受伤,多为剐蹭伤,均无生命危险,正在全力组织救援。爆燃原因正在调查,善后安置工作正在有序进行。',
        }
      ],
      indeterminate: false,
      checkedAll: false,
      setOfCheckedId: [],
      pageNo: 1,
      pageSize: 10,
      total: 0,
      currentPage: 1
    }
  },
  methods: {
    // 全选
    onCheckAllChange (e) {
      this.msgList.forEach((item) =>
        this.updateCheckedSet(item.msgCode, e)
      )
      this.refreshCheckedStatus()
    },
    // 单挑选择
    onItemChecked (e, msgCode) {
      this.updateCheckedSet(msgCode, e)
      this.refreshCheckedStatus()
    },

    // 更新选择中的数据
    updateCheckedSet (msgCode, checked) {
      if (checked) {
        this.setOfCheckedId.push(msgCode)
        this.setOfCheckedId = [...new Set(this.setOfCheckedId)]
      } else {
        const index = this.setOfCheckedId.findIndex((item) => item === msgCode)
        this.setOfCheckedId.splice(index, 1)
      }
    },
    // 更新全选的状态
    refreshCheckedStatus () {
      if (this.msgList.length > 0) {
        this.checkedAll = this.msgList.every((item) =>
          this.setOfCheckedId.includes(item.msgCode)
        )
        this.indeterminate =
          this.msgList.some((item) =>
            this.setOfCheckedId.includes(item.msgCode)
          ) && !this.checkedAll
      } else {
        this.checkedAll = false
        this.indeterminate = false
      }
    },
    handleSizeChange (val) {
      console.log(`每页 ${val} 条`)
      this.pageSize = val
      this.getListInfo()
    },
    handleCurrentChange (val) {
      console.log(`当前页: ${val}`)
      this.currentPage = val
      this.getListInfo()
    }
  }
}
</script>
<style lang="scss" scoped>
.searchItem{
  .content{
    width:80%;
    overflow: hidden;
    text-overflow:ellipsis;
    -webkit-line-clamp: 2;
    word-wrap: break-word;
    display: -webkit-box;
    -webkit-box-orient: vertical;
  }
}
</style>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue 3 中实现全选反选功能,可以使用 `v-model` 指令绑定一个布尔值来实现全选和反选的状态切换。具体实现步骤如下: 1. 在 data 中定义一个数组 `items`,用来存储需要全选反选的选项列表。 ```javascript <script> export default { data() { return { items: [ { id: 1, name: '选项1', checked: false }, { id: 2, name: '选项2', checked: false }, { id: 3, name: '选项3', checked: false } ], allChecked: false // 全选状态,默认为未选中 } } } </script> ``` 2. 在模板中使用 `v-for` 循环渲染出所有选项,并使用 `v-model` 绑定每个选项的 `checked` 属性。 ```html <template> <div> <label> <input type="checkbox" v-model="allChecked" @change="selectAll"> 全选 </label> <div v-for="item in items" :key="item.id"> <label> <input type="checkbox" v-model="item.checked" @change="checkItem"> {{ item.name }} </label> </div> </div> </template> ``` 3. 实现全选和反选的方法。 ```javascript <script> export default { data() { return { items: [ { id: 1, name: '选项1', checked: false }, { id: 2, name: '选项2', checked: false }, { id: 3, name: '选项3', checked: false } ], allChecked: false // 全选状态,默认为未选中 } }, methods: { // 全选/取消全选 selectAll() { this.items.forEach(item => item.checked = this.allChecked) }, // 单个选项被选中/取消选中 checkItem() { this.allChecked = this.items.every(item => item.checked) } } } </script> ``` 在 `selectAll` 方法中,遍历 `items` 数组,将每个选项的 `checked` 属性设置为 `allChecked` 的值,这样就实现了全选和取消全选功能。 在 `checkItem` 方法中,判断当前是否所有的选项都被选中,如果是,则将 `allChecked` 的值设置为 `true`,否则设置为 `false`,这样就实现了反选的功能。 这样,我们就完成了 Vue 3 中全选反选的实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值