VUE:实现模块分类展示数据列表

news/2024/7/10 0:49:29 标签: vue

简介

项目中,会有一个模块展示多个类别的数据,点某一个标题只展示相关的内容。

具体实现

<template>
  <div>
    <div class="classifyToolBox">
      <div class="flexRowStart classifyToolBar">
        <div v-for="(item, index) in classifyToolData" :key="index" class="classifyToolBtn" :class="[currentIndex === index ? 'page-select' : '']" @click="clickFun(index)" >{{item}}</div>
      </div>
      <div class="classifyToolListBody">
        <div>这里是{{classifyToolData[currentIndex]}}的数据</div>
<!--        展示当前所选中分类标题对应的分类列表数据-->
        <div v-for="(item, index) in classifyToolList[currentIndex]" :key="index" class=""></div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentIndex: 0, // 选中的文章模块的类别的index,默认写-1,暂时写0
      classifyToolData: ["分类一", "分类二", "分类三", "分类四"], // 模块分类
      classifyToolList: [], // 模块N个分类对应的N个数据列表
      classifyToolPageInfo: [
        { pageSize: 10, pageIndex: 1, isHaveMoreData: true },
        { pageSize: 10, pageIndex: 1, isHaveMoreData: true },
        { pageSize: 10, pageIndex: 1, isHaveMoreData: true },
        { pageSize: 10, pageIndex: 1, isHaveMoreData: true }
      ] // 模块分类的分页查询条件
    };
  },
  created() {
    // this.getToolClassifyDataFun();
  },
  methods: {
    // 1.查询:模块的分类
    getToolClassifyDataFun() {
      let params = { ... };
      this.$_http.get(this.$_API.GET_HOME_CLASSIFY_TOOL, { params }).then(res => {
        this.classifyToolList = [];
        if (res.data) {
          this.classifyToolData = res.data;
          this.classifyToolData.forEach(item => {
            if (item.keyID) {
              this.classifyToolList.push([]);
            }
          });
          // 默认查询第一个分类对应的列表数据
          if (this.classifyToolData.length > 0) {
            // 模拟手动点击第一个分类栏
            this.$nextTick(() => {
              this.clickFun(0);
            });
          }
        }
      });
    },
    // 2.查询:分类类型对应的数据列表
    // 操作:点击文章模块分类标题
    clickFun(index) {
      this.currentIndex = index;
      //后面的就是调用接口及返回数据的处理,重点是注意返回数组的赋值及分页查询条件的处理。
      // this.classifyToolPageInfo[index].pageSize = this.initPageInfo.pageSize;
      // this.classifyToolPageInfo[index].pageIndex = this.initPageInfo.pageIndex;
      // this.classifyToolPageInfo[index].isHaveMoreData = this.initPageInfo.isHaveMoreData;
      // let params = {
      //   pageSize: this.classifyToolPageInfo[index].pageSize,
      //   pageIndex: this.classifyToolPageInfo[index].pageIndex,
      //   classifyID: this.classifyToolData[index].keyID
      // };
      // this.$_http.get(this.$_API.GET_HOME_CLASSIFY_TOOL_LIST, { params }).then(res => {
      //   if (res.data) {
      //     this.$set(this.classifyToolList, index, [...res.data.datas]); // 如此即可立即回显到页面上,避免对数组第i个进行赋值的操作。
      //     this.classifyToolPageInfo[index].pageIndex = this.classifyToolPageInfo[index].pageIndex + 1;
      //     if (res.data.pageInfo.totalRow <= res.data.pageInfo.pageIndex * this.classifyToolPageInfo[index].pageSize) {
      //       this.classifyToolPageInfo[index].isHaveMoreData = false;
      //     }
      //   }
      // });
    }
  }
};
</script>

<style lang="scss" scoped>
.flexRowStart {
  display: flex;
  flex-direction: row;
  justify-content: flex-start;
}
.classifyToolBox {
  background-color: #fff;
  .classifyToolBar {
    padding: 0.25rem 0.5rem;
    border-bottom: 1px solid #DBDEE3;
    .classifyToolBtn {
      border: none;
      font-size: 0.7rem;
      width: 25%;
      text-align: center;
      color: #555658;
      padding: 0.25rem 0;
    }
    .page-select {
      color: #438bef;
      font-size: 0.8rem;
      border-bottom: 1px solid #438bef;
    }
  }
  .classifyToolListBody{
    padding: 0.5em 0.5rem;
    color: #438bef;
  }
}
</style>

最后

觉得有用的朋友请用你的金手指点一下赞,或者评论留言一起探讨技术!


http://www.niftyadmin.cn/n/1867269.html

相关文章

VUE:iframe访问并展示外部网址或者视频

简介 在H5网址、APP等项目中&#xff0c;会有访问外部链接、播放网上视频的需求。 具体实现 上一个页面&#xff0c;传入三个 参数&#xff0c;分别是type&#xff08;0 图文&#xff0c;1 视频&#xff0c;注意最好是用字符窜的格式&#xff09;、url&#xff08;图文或视频…

微信小程序:解决wx.createInnerAudioContext()播放语音的坑

简介 微信小程序中用wx.createInnerAudioContext()&#xff0c;发现怎么暂停和取消的效果都差强人意&#xff0c;原因是将此方法写在了我的播放语音函数里。然后就参考了网上的解决方案。 具体实现 将此方法声明在onLoad中&#xff0c;&#xff08;如果声明在page外部&#…

VUE:返回页面顶部

简介 VUE项目中&#xff0c;需要做一个浮窗&#xff0c;点击浮窗返回页面顶部。 具体实现 data () { return { // 下滑到一定位置才显示按钮控件 visible: false, scrollTop: 0 } }, // 获取屏幕高度 mounted () { window.addEventListener(scroll, this.handleScroll) }, //…

VUE:搜索框动态提示(使用了elementUi的提示组件)

简介 VUE项目中&#xff0c;需要实现用户输入内容&#xff0c;然后边输入边动态查询是否要模糊匹配的值&#xff0c;并实时展示给用户。 注意&#xff1a;此处是引入了elementUI框架的。 具体实现 // HTML: <el-autocomplete v-model"hospitalName.hospitalName&qu…

JS:浏览器中获取用户手机设备权限,如语音、相机等

简介 H5网页项目中有需要拍照、录音、视频等会需要获取手机设备权限。 具体实现 created() {if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia) {this.getUserMedia({ video: true, audio:…

微信小程序:md5签名加密

简介 微信小程序不让引入现成的库文件&#xff0c;于是自己百度了几个方法进行了综合&#xff0c;封装一个md5加密算法的js&#xff08;不改变原本的大小写&#xff09;。各种加密场景&#xff0c;比如生成md5签名&#xff08;本文以生成md5签名为例&#xff09;。 具体实现 …

VUE:md5签名加密

简介 具体实现 方法一&#xff1a; npm安装&#xff1a; npm install --save js-md51.在需要使用的项目文件中引入&#xff1a; import md5 from js-md5;使用&#xff1a; md5(hello world);方法二&#xff1a; 2.或者在main.js文件中将md5转换成vue原型&#xff1a; (1) imp…

JS:判断变量是数组还是对象

简介 做数据处理&#xff0c;有时需要判断数据类型是对象还是数组&#xff0c;所以研究了三个便捷的方法。 具体实现 方法一&#xff1a;通过判断变量的类型&#xff0c;并且变量的length属性(除了有一种例外是arguments对象–当给函数传参时数据存储的地方) var arr[2, 3,…