日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Vue Element UI自定義描述列表組件

瀏覽:151日期:2022-09-29 14:34:37

本文實例為大家分享了Vue Element UI自定義描述列表組件的具體代碼,供大家參考,具體內容如下

效果圖

Vue Element UI自定義描述列表組件

寫在前面

寫后臺管理經常從列表點擊查看詳情,展示數(shù)據(jù)信息,Element UI雖然有表格組件,但是描述組件并沒有,之前團隊的成員遇到這種情況都自己去寫樣式,寫起來也麻煩,而且每個人寫出來的樣式也不統(tǒng)一,破壞了項目的整體風格。像是Ant Design UI就有描述組件,用起來特別舒服,所以索性自己結合Element UI的el-row和el-col自己寫了一個。

實現(xiàn)哪些功能

1、每行的高度根據(jù)改行中某一列的最大高度自動撐開2、列寬度自動補全,避免最后一列出現(xiàn)殘缺的情況3、支持純文本與HTML插槽4、支持每行幾列的設置5、支持每列寬度自定義6、支持動態(tài)數(shù)據(jù)重繪

組件設計

1、使用父子組件嵌套實現(xiàn),父組件為 e-desc, 子組件為 e-desc-item 。2、e-desc-item傳遞props的label 和 插槽的value,使用 $slots.content來顯示DOM3、利用 el-row 和 el-col 來實現(xiàn)整體組件布局

封裝e-desc組件

<template> <div :style='{margin}'> <!-- 標題 --> <h1 v-if='title' v-html='title'></h1> <el-row class='desc-row'> <slot/> </el-row> </div></template><script>export default { name: ’EDesc’, // 通過provide提供給子組件 provide () { return { labelWidth: this.labelWidth, column: this.column, size: this.size } }, props: { // 數(shù)據(jù)源,監(jiān)聽數(shù)據(jù)重繪 data: { type: Object, required: true, default () {return {} } }, // 標題 title: { type: String, default: ’’ }, // 邊距 margin: { type: String, default: ’0’ }, // label寬度 labelWidth: { type: String, default: ’120px’ }, column: { // 每行顯示的項目個數(shù) type: [Number, String], default: 3 }, size: { // 大小 type: String, default: ’’ } }, watch: { data: { handler () {this.$nextTick(() => { // 篩選出子組件e-desc-item const dataSource = this.$slots.default const dataList = [] dataSource.forEach(item => { if (item.componentOptions && item.componentOptions.tag === ’e-desc-item’) { dataList.push(item.componentInstance) } }) // 剩余span let leftSpan = this.column const len = dataList.length dataList.forEach((item, index) => { // 處理column與span之間的關系 // 剩余的列數(shù)小于設置的span數(shù) const hasLeft = leftSpan <= (item.span || 1) // 當前列的下一列大于了剩余span const nextColumnSpan = (index < (len - 1)) && (dataList[index + 1].span >= leftSpan) // 是最后一行的最后一列 const isLast = index === (len - 1) if (hasLeft || nextColumnSpan || isLast) { // 滿足以上條件,需要自動補全span,避免最后一列出現(xiàn)殘缺的情況 item.selfSpan = leftSpan leftSpan = this.column } else { leftSpan -= item.span || 1 } })}) }, deep: true, immediate: true } }}</script><style scoped lang='scss'> .desc{ .desc-title { margin-bottom: 10px; color: #333; font-weight: 700; font-size: 16px; line-height: 1.5715; } .desc-row{ display: flex; flex-wrap: wrap; border-radius: 2px; border: 1px solid #EBEEF5; border-bottom: 0; border-right: 0; width: 100%; } }</style>封裝e-desc-item組件

<template> <el-col :span='computedSpan' class='desc-item'> <div :class='size'> <label : v-html='label'></label> <div v-if='$slots'><!-- 純文本 --><slot v-if='$slots.default && $slots.default[0].text'/><!-- HTML --><slot name='content' v-else-if='$slots.content'/><span v-else>暫無數(shù)據(jù)</span> </div> </div> </el-col></template><script>export default { name: ’EDescItem’, inject: [’labelWidth’, ’column’, ’size’], props: { span: { type: [Number, String], required: false, default: 0 }, label: { type: String, required: false, default: ’’ } }, data () { return { // 子組件自己的span selfSpan: 0 } }, computed: { computedSpan () { // 子組件自己的span,用于父組件計算修改span if (this.selfSpan) {return 24 / this.column * this.selfSpan } else if (this.span) { // props傳遞的spanreturn 24 / this.column * this.span } else { // 未傳遞span時,取columnreturn 24 / this.column } } }}</script><style scoped lang='scss'> .desc-item { border-right: 1px solid #EBEEF5; border-bottom: 1px solid #EBEEF5; .desc-item-content { display: flex; justify-content: flex-start; align-items: center; color: rgba(0,0,0,.65); font-size: 14px; line-height: 1.5; width: 100%; background-color: #fafafa; height: 100%; .desc-item-label{border-right: 1px solid #EBEEF5;display: inline-block;padding: 12px 16px;flex-grow: 0;flex-shrink: 0;color: rgba(0, 0, 0, 0.6);font-weight: 400;font-size: 14px;line-height: 1.5;height: 100%;display: flex;align-items: center; } .desc-item-value{background: #fff;padding: 12px 16px;flex-grow: 1;overflow: hidden;word-break: break-all;height: 100%;display: flex;align-items: center;color: #444;span{ color: #aaa;} } &.small {.desc-item-label,.desc-item-value { padding: 10px 14px;} } } }</style>使用方式

<template> <e-desc :data=’info’ margin=’0 12px’ label-width=’100px’> <e-desc-item label='姓名'>{{info.name}}</e-desc-item> <e-desc-item label='年齡'>{{ info.age }}歲</e-desc-item> <e-desc-item label='性別'>{{ info.sex }}</e-desc-item> <e-desc-item label='學校'>{{ info.school }}</e-desc-item> <e-desc-item label='專業(yè)'>{{ info.major }}</e-desc-item> <e-desc-item label='愛好'>{{ info.hobby }}</e-desc-item> <e-desc-item label='手機號'>{{ info.phone }}</e-desc-item> <e-desc-item label='微信'>{{ info.wx }}</e-desc-item> <e-desc-item label='QQ'>{{ info.qq }}</e-desc-item> <e-desc-item label='住址'>{{ info.address }}</e-desc-item> <e-desc-item label='自我描述' :span=’2’>{{ info.intro }}</e-desc-item> <e-desc-item label='操作' :span=’3’> <template slot='content'><el-button size='small' type='primary'>修改</el-button><el-button size='small' type='danger'>刪除</el-button> </template> </e-desc-item> </e-desc></template><script>import EDesc from ’./e-desc’import EDescItem from ’./e-desc-item’export default { components: { EDesc, EDescItem }, data () { return { info: {name: ’Jerry’,age: 26,sex: ’男’,school: ’四川大學’,major: ’碼農專業(yè)’,address: ’四川省成都市’,hobby: ’搬磚、前端、賺錢’,phone: 18888888888,wx: ’Nice2cu_Hu’,qq: 332983810,intro: ’我是一個粉刷匠,粉刷本領強。我要把那新房子,刷得更漂亮。刷了房頂又刷墻,刷子飛舞忙。哎呀我的小鼻子,變呀變了樣。我是一個粉刷匠,粉刷本領強。我要把那新房子,刷得更漂亮。刷了房頂又刷墻,刷子飛舞忙。哎呀我的小鼻子,變呀變了樣。’ } } }}</script>參數(shù)說明

Vue Element UI自定義描述列表組件

至此,代碼就寫完啦,考慮不周或者有bug的地方,還望多多留言告知我喲

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
视频一区在线播放| 国产免费播放一区二区| 中文字幕一区二区三区四区久久| 福利一区和二区| 欧美1区二区| 69堂免费精品视频在线播放| 日韩和欧美一区二区| 综合在线一区| 视频一区日韩精品| 天使萌一区二区三区免费观看| 精品一区三区| 国内精品福利| 日韩精品91| 青青久久av| 亚洲激情中文| 欧美午夜不卡| 99日韩精品| 久久福利影视| 免费在线视频一区| 日韩不卡一二三区| 成人在线免费观看网站| 日本不卡免费高清视频在线| 久久亚洲精精品中文字幕| 福利精品一区| 欧美成人高清| 日本不卡不码高清免费观看| 日本综合精品一区| 人人爱人人干婷婷丁香亚洲| 国产欧美欧美| 国产精品伦理久久久久久| 日韩精品欧美| 亚久久调教视频| 精品国产亚洲日本| 欧美日韩国产v| 日韩有吗在线观看| 欧美freesex黑人又粗又大| 一区在线观看| 国产精品久一| 欧美亚洲激情| 亚洲二区三区不卡| 精品一区二区三区的国产在线观看 | 91欧美极品| 中文另类视频| 国产精品亚洲综合久久| 精品在线99| 久久影院资源站| 亚洲日本欧美| 在线亚洲观看| 日韩精品dvd| 精品国产91| 日本午夜精品久久久久| 99国产成+人+综合+亚洲欧美| 日韩高清一区| 怡红院精品视频在线观看极品| 国产一区二区三区四区五区传媒 | 国产精成人品2018| 蜜芽一区二区三区| 五月天久久久| 99久久亚洲精品| 伊伊综合在线| 日韩精品首页| 91精品蜜臀一区二区三区在线| 麻豆理论在线观看| 国产欧美另类| 麻豆精品av| 日本午夜精品视频在线观看| 亚洲伊人精品酒店| 日韩影院免费视频| 午夜精品免费| 亚洲国产成人精品女人| 免费看欧美美女黄的网站| 欧美日韩国产欧| 日韩制服丝袜先锋影音| 亚洲女同中文字幕| 免费日韩视频| 日本va欧美va瓶| 欧美国产另类| 日韩精品专区| 国产在线成人| 欧美网站在线| 久久三级福利| 亚洲综合国产| 日韩欧美中文字幕一区二区三区 | 日韩精品午夜视频| 国产亚洲激情| 日本欧美一区二区| 国产精品中文字幕制服诱惑| 激情久久99| 日韩欧美一区二区三区在线视频| 水蜜桃久久夜色精品一区| 国产高清日韩| 久久精品99久久久| 成人高清一区| 欧美女激情福利| 91麻豆精品| 红桃视频亚洲| 国产乱码精品| 欧美理论视频| 日韩国产高清在线| 欧洲精品一区二区三区| 欧美另类专区| 国产一区二区久久久久| 不卡中文一二三区| 国产精品片aa在线观看| 欧美福利在线| 免费一区二区三区在线视频| 色在线视频观看| 视频一区欧美日韩| 日韩欧美看国产| 亚洲精品婷婷| 久久蜜桃资源一区二区老牛| 国产日韩欧美一区二区三区在线观看| 亚洲成人精品| 精品国产麻豆| 久久精品xxxxx| 中文在线日韩| 视频一区二区欧美| 激情久久久久久| 亚洲电影有码| 久久的色偷偷| 国产精品chinese| 亚洲精品电影| 欧美性感美女一区二区| 免费看久久久| 免费亚洲婷婷| 久久99久久久精品欧美| 日韩国产91| 亚洲麻豆一区| 性色av一区二区怡红| 亚洲精品a级片| 日韩和的一区二在线| 特黄毛片在线观看| 国产极品久久久久久久久波多结野| 久久精品72免费观看| 日韩精品国产精品| 日韩av一区二| 99香蕉国产精品偷在线观看| 夜久久久久久| 婷婷综合在线| 国产精品婷婷| 亚洲欧美在线综合| 日韩av影院| 国产一区二区三区免费在线 | 亚洲va在线| 美女被久久久| 亚洲日本免费电影| 国产欧美一区二区三区米奇| 欧美在线91| 国产美女高潮在线| 欧美亚洲综合视频| 美女视频一区在线观看| 久久精品国内一区二区三区| 欧美国产专区| 日韩黄色大片| 99久久激情| 日韩欧美激情电影| 国产不卡精品在线| 激情91久久| 久久99蜜桃| 久久激情一区| 亚洲精品一级| 里番精品3d一二三区| 欧美日韩一区二区三区视频播放| 国产综合亚洲精品一区二| 久久夜夜操妹子| 欧美特黄一区| 丁香婷婷久久| 日韩中文字幕一区二区三区| 欧美1区2区3| 午夜在线视频一区二区区别| 国产精品igao视频网网址不卡日韩| 好看不卡的中文字幕| 国产欧美一级| 亚洲女同中文字幕| 国产一区国产二区国产三区| 国产亚洲高清视频| 国产一区二区三区四区| 免费看欧美美女黄的网站| 精品国产午夜肉伦伦影院| 久久久久久美女精品| 国产激情一区| 国产精品成人国产| 在线视频免费在线观看一区二区| 国产免费播放一区二区| 日韩一区二区免费看| 日韩精品永久网址| 国产精品一区免费在线| 亚洲18在线| 亚洲二区视频| 日韩中文字幕高清在线观看| 久久中文字幕一区二区三区| 奇米亚洲欧美| 日韩欧乱色一区二区三区在线| 欧美日韩四区| 日韩1区2区| 色综合五月天| 久久影院午夜精品| 久久精品一区二区三区中文字幕| 久久精品超碰| 欧美日韩国产一区二区在线观看|