返回顶部
首页 > 资讯 > 前端开发 > JavaScript >使用vNode实现给列表字段打标签
  • 868
分享到

使用vNode实现给列表字段打标签

2024-04-02 19:04:59 868人浏览 八月长安
摘要

目录问题思路 实现1、过滤数据,需要打标签的采用jsx写法base.less 定义标签样式2、封装列表渲染组件3、封装渲染vnode的方法4、页面组件调用效果展示问题 如何给列表数据

问题

如何给列表数据打标签?类似下面这种样子?

思路 实现

  • 数模转换(对接口请求回来的数据进行过滤标记,返回新的数据)
  • 渲染新的数据模型

1、过滤数据,需要打标签的采用jsx写法

业务数据的处理我封装在 mixins 里面

// 存放全局的mixin, 可拆分到模块独享
import { mapGetters } from 'Vuex'
import { fetchListData } from '@/api/global/api.js'
export default {
  data() {
    return {
      p_cateGory: [],
      listdata: [],
      p_total: 0,
      p_loading: false,
    }
  },
  computed: {
    // ...mapGetters(['productLevel', 'productLevelInfo']),
    p_listdata() {
      const data = this.listdata;
      data.forEach((item) => {
        // ...
        // jsx 方式,打标签
        if (item.status === 2 || item.status === 3) {
          item.status = <span style={{color: '#999'}}>停售</span>
        } else {
          item.status = item.status
        }
        if (item.age <= 25) {
          item.age = <span class="badge_info">{item.age}</span>
        }
        if (item.sex === 'Man') {
          item.sex = <span class="badge_default">{item.sex}</span>
        }
      })
      return data;
    }
  },
  methods: {
    async getProductList(params = {}) {
      try {
        this.p_loading = true
        this.listdata = []
        const res = await fetchListData(params)
        if (res.code === 0) {
          const { data = [], total = 0 } = res || {}
          if (Array.isArray(data)) {
            this.listdata = [...data]
            this.p_total = total
          } else {
            this.listdata = []
            this.p_total = 0
          }
        } else {
          this.listdata = []
          this.p_total = 0
          this.$message.error(res.message || '出错了')
        }
        this.p_loading = false;
      } catch (err) {
        this.p_loading = false
        this.listdata = []
        this.p_total = 0
        console.log(err);
      }
    }
  }
}

base.less 定义标签样式

.badge_info {
  color: #4760f0;
  background: #1C84C6;
  padding: 5px 8px;
  color: #fff;
  border-radius: 5px;
}
.badge_default {
  color: #4760f0;
  background: #4760f0;
  padding: 5px 8px;
  color: #fff;
  border-radius: 5px;
}

2、封装列表渲染组件

<template>
  <ul class="listV2">
    <li class="listV2_row-title">
      <span v-for="(col, index) in fieldList" :key="index" class="listV2_cell ellipsis" :name="col.fieldName">
        {{col.fieldLabel}}
      </span>
    </li>
    <!-- 行 -->
    <div v-if="tableData.length === 0" class="nodata">暂无数据</div>
    <li v-for="(row, index) in tableData" :key="index" class="listV2_row pointer" @click="rowClickToDetail(row)">
      <!-- 单元格-列 -->
      <span v-for="(col, index) in fieldList" :key="index" class="listV2_cell ellipsis" :name="col.fieldName">
        <RenderDom :vNode="row[col.fieldName] || '-'"></RenderDom>
      </span>
    </li>
  </ul>
</template>
<script>
  import RenderDom from "./renderDom";
  export default {
    name: 'TableList',
    props: {
      tableData: {
        type: Array,
        required: true,
      },
      fieldList: {
        type: Array,
        required: true,
      },
      align: {
        type: String,
        default: 'left',
      },
    },
    components: {
      RenderDom,
    },
    data() {
      return {}
    },
    computed: {},
    watch: {},
    created() { },
    mounted() { },
    methods: {},
    updated() { },
    beforeDestroy() { },
  }
</script>
<style lang='less' rel='stylesheet/less' scoped>
  @import "./index.less";
</style>

3、封装渲染vNode的方法

const renderDom = {
  props: {
    vNode: {
      type: [Array, String, Object,Number],
    },
  },
  render(h) {
    // jsx - vNode 直接返回,交给框架处理(js语法带来很多可能,列表打标签功能)
    if (typeof this.vNode === 'object') {
      return this.vNode;
    }
    // 普通数据,直接包一层div,然后返回给页面
    return h(
      'div',
      {
        class: 'ellipsis',
      },
      this.vNode
    )
  }
}

4、页面组件调用

<template>
  <div class="customer">
    <table-list v-loading="p_loading" :tableData="p_listdata" :fieldList="fieldList"></table-list>
  </div>
</template>
<script>
  import TableList from '@/basecomponents/TableList/index'
  import $_pMixins from "@/mixins/product.js";
  import enums from './enum.js'
  export default {
    name: 'Customer',
    props: {},
    components: {
      'table-list': TableList,
    },
    mixins: [$_pMixins],
    data() {
      return {
        tableData: [],
        fieldList: Object.freeze(enums.Enum_customerFieldList),
      }
    },
    computed: {},
    watch: {},
    created() {
    },
    mounted() {
      this.initData()
    },
    methods: {
      initData() {
        this.getProductList()
      }
    },
    updated() { },
    beforeDestroy() { },
  }
</script>
<style lang='less' rel='stylesheet/less' scoped>
  @import "./index.less";
</style>

效果展示

以上就是使用vNode实现给列表字段打标签的详细内容,更多关于vNode列表字段标签的资料请关注编程网其它相关文章!

--结束END--

本文标题: 使用vNode实现给列表字段打标签

本文链接: https://lsjlt.com/news/168299.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用vNode实现给列表字段打标签
    目录问题思路 实现1、过滤数据,需要打标签的采用jsx写法base.less 定义标签样式2、封装列表渲染组件3、封装渲染vNode的方法4、页面组件调用效果展示问题 如何给列表数据...
    99+
    2024-04-02
  • 如何使用mysql给表新加的列字段赋值
    要给MySQL表的新列字段赋值,可以使用 `ALTER TABLE` 语句以及 `UPDATE` 语句。首先,使用 `ALTER T...
    99+
    2023-09-15
    mysql
  • 如何用mysql给表新加的列字段赋值
    在MySQL中,可以使用ALTER TABLE语句来给表新加的列字段赋值。具体步骤如下: 首先,使用ALTER TABLE语句来添...
    99+
    2024-04-09
    mysql
  • DedeCMS arclist标签中实现表格及列表中两列排列
    今天介绍两种两列排列方法(表格及列表): 复制代码代码如下: <table> <tr> {dede:arclist row='10'} <td><a href="[field:a...
    99+
    2022-06-12
    arclist 两列排列
  • html中如何使用p标签实现段落
    这篇文章主要为大家展示了“html中如何使用p标签实现段落”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“html中如何使用p标签实现段落”这篇文章吧。 P用法...
    99+
    2024-04-02
  • html有序列表标签怎么使用
    这篇文章主要介绍了html有序列表标签怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇html有序列表标签怎么使用文章都会有所收获,下面我们一起来看看吧。一、ol li有...
    99+
    2024-04-02
  • HTML列表标签与CSS样式结合:打造美观实用的列表样式
    在网页设计中,列表是一种常见且重要的元素,它可以帮助您组织和展示数据,使网页内容更具条理性和可读性。HTML提供了多种列表标签,包括<ul>(无序列表)、<ol>(有序列表)和<dl>(定义列表),您...
    99+
    2024-02-11
    HTML列表标签 CSS样式 列表样式 网页设计 用户体验
  • html5实现下拉列表的标签是什么
    这篇文章主要介绍html5实现下拉列表的标签是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! html5实现下拉列表的标签是“<select&g...
    99+
    2024-04-02
  • mysql使用存储过程批量给表加字段
    背景:项目中,需要给几百张表添加相同的字段,手动添加比较费劲,于是打算使用存储过程实现。 编写的存储过程: delimiter // -- 创建存储过程之前需判断该存储过程是否已存在,若存在则删除 DROP PROCEDURE ...
    99+
    2017-06-09
    mysql使用存储过程批量给表加字段
  • vue使用rules实现表单字段验证
    vue中表单字段验证的写法和方式有多种,本博客介绍三种较为常用的验证方式。 1. 写在 data 中验证 表单内容 <!-- 表单 --> <el-form r...
    99+
    2024-04-02
  • phpcms V9利用num++实现多样形式列表标签调用
    在首页或者频道页调用文章列表的时候,经常会使用到左右对称或者每五行出现一条横线的调用形式。 其实代码很简单,利用num++的循环方式,以及{if}{/if}进行样式判断即可。代码如下: 复制代码代码如下: {pc:con...
    99+
    2022-06-12
    多样形式 列表标签
  • HTML 列表标签的最佳实践:打造出色的用户体验
    选择正确的列表类型至关重要,有以下几种选择: 无序列表():用于表示项目次序无关紧要,例如杂货清单。 有序列表():用于表示项目按照特定顺序排列,例如步骤说明。 定义列表():用于表示术语及其定义,例如词典。 列表结构 缩进和对齐:...
    99+
    2024-04-02
  • pandas数据处理之 标签列字符转数字的实现
    机器学习中,当我们在进行数据预处理的时候,对于标签列非字符的数据,我们往往需要将其转换成字符,因为有的算法可能不支持非数字类型来做特征。 那么怎么快捷地来着这个转换呢,请看我的示例:...
    99+
    2024-04-02
  • pandas数据处理之标签列字符转数字的实现
    这篇文章主要介绍pandas数据处理之标签列字符转数字的实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!机器学习中,当我们在进行数据预处理的时候,对于标签列非字符的数据,我们往往需要将其转换成字符,因为有的算法可能...
    99+
    2023-06-14
  • dedeCMS使用arclist标签调用自定义字段的方法
    本文实例讲述了dedecms使用arclist标签调用自定义字段的方法。分享给大家供大家参考。具体分析如下: 其实方法非常的简单我们只要使用addfields就可以实现增加自定自段了,不过有一点需要注意的是如果你在在后面...
    99+
    2022-06-12
    dedeCMS arclist标签 调用 自定义 字段 方法
  • 当序列化字段的名称相同时,我应该使用结构标签吗?
    一分耕耘,一分收获!既然打开了这篇文章《当序列化字段的名称相同时,我应该使用结构标签吗?》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑...
    99+
    2024-04-05
  • html中怎么用标签实现文本分段
    这篇文章主要介绍了html中怎么用标签实现文本分段的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇html中怎么用标签实现文本分段文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • 使用织梦tag列表调用自定义字段附加字段的方法
    这篇文章主要介绍“使用织梦tag列表调用自定义字段附加字段的方法”,在日常操作中,相信很多人在使用织梦tag列表调用自定义字段附加字段的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”使用织梦tag列表调用...
    99+
    2023-06-10
  • javascript使用什么标签实现
    这篇文章给大家分享的是有关javascript使用什么标签实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 javascript使用<scri...
    99+
    2024-04-02
  • 织梦标签channel实现列表页调用当前栏目的子类
    复制代码代码如下: {dede:channel type='son' row='10' currentstyle="<li class='hover'><a href='~typelink~' ~rel...
    99+
    2022-06-12
    列表页 当前栏目 子类
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作