PrimeVue使用技巧(一)

TreeTable

  • TreeTable作用域插槽写法,直接写template循环会直接报错,用下面写法即可插入作用域插槽,v-else可以不写,其余内容会默认展示
js 复制代码
  <Column v-for="col in columnConfig"
                :field="col.field"
                :key="col.field"
                :expander="col.expander">
          <template v-if="col.field === 'name'"
                    #body="slotProps">
            <div>
                {{slotProps.node}}
            </div>
          </template>
    </Column>  
  • 对齐方式
    文档中使用的对齐方式是在配置中添加style属性直接映射到行内样式,这样在TreeTableDataTable中由于thtr外层display不同会导致无法设置对齐,所以我们采用普通表格在标签上配置tableClass的方式,树形表格采用直接通过tableProps传递class到table元素本身,然后自己添加样式,对齐TreeTableDataTable,其实99.99%的表格我们只需要添加一个居中样式即可
js 复制代码
// 列配置
{
    "tableColumn": [
      {
        "field": "name",
        "header": "指标名称",
        "sortable": true,
        "style": { "min-width": "10rem" },
        "class": "align-center"  //添加对齐样式
      },
    ]
}
// useTableConfig.js 普通表格配置
export const useTableCommonConfig = (mode = 'multiple') => {
  const staticConf = {
    paginator: true,
    stripedRows: true,
    resizableColumns: true,
    scrollable: true,
    columnResizeMode: 'expand',
    scrollHeight: 'flex',
    tableClass: 'control-table', //配置自定义一个css局部类
  }
  return mode === 'multiple'
    ? {
        sortMode: 'multiple',
        metaKeySelection: true,
        ...staticConf,
      }
    : {
        sortMode: 'single',
        metaKeySelection: false,
      }
}
// useTreeTableConfig.js 树形表格配置
export const treeTableProps = () => {
  return {
    resizableColumns: true,
    columnResizeMode: 'expand',
    scrollable: true,
    scrollHeight: 'flex',
    rowHover: true,
    tableProps: {
      class: 'control-table', //tableProps可以直接将任何属性直接传到table元素上
    },
  }
}
// enhanceFrameWork.scss 框架额外样式
.control-table {
  .p-datatable-thead,
  .p-treetable-thead {
    .align-center {
      justify-content: center;

      .p-column-header-content {
        justify-content: center;
      }
    }
  }
.p-datatable-tbody,
 .p-treetable-tbody {
   .align-center {
     text-align: center;
     justify-content: center;
   }
  }
}
  • 固定宽度调整
    由于TreeTable使用的是flex布局,所以调整默认固定宽度在列配置中使用flex布局调整模式,对于DataTable直接使用类似style:{ 'min-width':'15rem'}类似块级样式即可
json 复制代码
// tableColumnConfig.js
...
 {
        "header": "权重",
        "field": "importance",
        "columnKey": "importance",
        "style": {
          "flex": "0 0 15rem" //添加样式
        },
        "class":"align-center" //居中对齐,配置见上文
      }

InputNumber

  • InputNumber设置小数,最大/最小位数
js 复制代码
 <InputNumber v-model="currentValue"
                     mode="decimal"
                     :minFractionDigits="2"
                     :maxFractionDigits="5"></InputNumber>

CustomIcon

PrimeVue框架附带了一个图标库PrimeIcon,但是对于自定义高的项目是远远不够的,如果想使用自定义图标,从iconfont上面找也是可以,但是存在风格不统一,样式不统一的缺点,使用iconify是个不错的选择,但是找图标实在是费劲,这里我建议使用material Design Icon官网在这里,使用同步的第三方维护的svg图标库,他和主库是同步的,这样可以单独引入图标,因为material Design实在太大,有4M,查找和单独引入相对都比较方便,这里还有基于vite组件化引入图标的插件,体验不错,步骤如下

  1. 安装mdicon图标库
css 复制代码
npm install @material-design-icons/svg@latest
  1. 配置 vitesvg组件化加载插件
css 复制代码
npm install vite-svg-loader --save-dev

//vite.config.js
...js
import svgLoader from 'vite-svg-loader'
...
plugins:[
    vue(),
    svgLoader({
    //特别注意这里关掉svgo,否则会出现加载的svg图标丢失 viewBox属性,造成无法通过rem控制大小
    svgo:false 
})
]
  1. 使用
js 复制代码
//buttonIcon.vue
//引入icon
import Face from '@material-design-icons/svg/outlined/face.svg'
<template>
    <Button label="自定义图标按钮">
    <-- primevue中 按钮自定义图标-->
            <template #icon>
              <Face class="svg-icon" />
            </template>
         
    </Button>
</template>

//global.scss
//配置全局svg图标类
...
.svg-icon{
   height:1rem;
   width:1rem;
   fill:currentColor;
}
相关推荐
慧一居士2 小时前
Vue项目中,子组件调用父组件方法示例,以及如何传值示例,对比使用插槽和不使用插槽区别
前端·vue.js
SeSs IZED2 小时前
【Nginx 】Nginx 部署前端 vue 项目
前端·vue.js·nginx
SuperEugene3 小时前
Vue3 性能优化规范:日常必做优化(不玄学、可落地)|可维护性与兜底规范篇
开发语言·前端·javascript·vue.js·性能优化·前端框架
A923A3 小时前
【小兔鲜电商前台 | 项目笔记】第二天
前端·vue.js·笔记·项目·小兔鲜
happymaker06264 小时前
vue指令扩展以及监视器的使用
前端·javascript·vue.js
还是大剑师兰特4 小时前
EventBus核心方法用法
javascript·vue.js·大剑师
happymaker06266 小时前
vue中对list的函数处理方式总结,以及常见功能的实现方法
javascript·vue.js·list
还是大剑师兰特6 小时前
vueup/vue-quill 详细介绍(Vue3 富文本编辑器)
javascript·vue.js·ecmascript
bigdargon7 小时前
【无标题】
vue.js
踩着两条虫7 小时前
AI驱动的Vue3应用开发平台深入探究(二十五):API与参考之Renderer API 参考
前端·javascript·vue.js·人工智能·低代码·前端框架·ai编程