最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

element-ui table組件如何使用render屬性的實現(xiàn)

 更新時間:2019年11月04日 15:07:08   作者:三只萌新  
這篇文章主要介紹了element-ui table組件如何使用render屬性的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

起因:

在使用 element-ui table組件時,由于表列比較多一個個寫特別麻煩,所以想通過將所有表頭定義成一個數(shù)組,通過遍歷多方式去實現(xiàn)。這樣解決了手寫很多 el-table-column 的情況。

障礙:

類似于下面自定義表列的樣式,它是通過 slot-scope 去覆蓋 el-table-column 內(nèi)部slot的樣式實現(xiàn)的。那我們在遍歷表頭數(shù)組的時候如何實現(xiàn)呢?

參考:

用過 react 開發(fā)會經(jīng)常用到 ant design ,其中它的 table 組件是可以接受 render屬性的,下面使用table組件時,只需要定義好,columns(表頭列) data(表的具體數(shù)據(jù))即可。整體看起來很簡潔 去渲染自定義的組件的。 點擊查看 antdesign

demo:

codepen demo地址

const columns = [
 {
 title: 'Name',
 dataIndex: 'name',
 render: (text, row, index) => {
  if (index < 4) {
  return <a>{text}</a>;
  }
  return {
  children: <a>{text}</a>,
  props: {
   colSpan: 5,
  },
  };
 },
 }]
 const const data = [
 {
 key: '1',
 name: 'John Brown',
 age: 32,
 tel: '0571-22098909',
 phone: 18889898989,
 address: 'New York No. 1 Lake Park',
 }]
ReactDOM.render(<Table columns={columns} dataSource={data} bordered />, mountNode);

在 Vue 中實現(xiàn) render 屬性

接下來我們要實現(xiàn)下圖的table的樣式,但是這一次我們采用 render 傳參數(shù)的方式

 

思路

  1. 父組件將需要渲染的列表通過 props 傳遞給子組件
  2. 子組件使用 slot 并填充默認渲染的 el-table-column 方式為 prop 渲染 data 中傳遞的值
  3. 子組件通過 slot 將值傳回給父組件,父組件通過 slot-scope 接受到子組件的值,判斷該項是否有 render 屬性,有的話在組件標簽添加 render 屬性返回的 html 去覆蓋 slot 中默認的值。

子組件定義默認值

有了上面的思路,去實現(xiàn)子組件。我們需要知道一點,每個 el-table-column 只是定義了一列的表頭和數(shù)據(jù),而 :data="tableList" 中的每項值是定義了一行的數(shù)據(jù)。所以 el-table-column 是按列來分,data 是按行來分

  • 通過props 去接受表頭列表,數(shù)據(jù)列表
  • 遍歷表頭數(shù)據(jù),并且將 el-table-column 作為默認數(shù)據(jù),使用 slot 包裹起來
  • 通過 slot 想父組件傳遞當前項的數(shù)據(jù)
<template>
 <el-table :data="tableList" style="width:500px">
  <template v-for="item in propList">
  <slot :content="item">
   <el-table-column :key="item.id" :prop="item.prop" :label="item.label"></el-table-column>
  </slot>
  </template>
 </el-table>
</template>
<script>
 export default {
  props:{
   propList:{
   type:Array,
   default:()=>[]
   },
   tableList:{
   type:Array,
   default:()=>[]
   },
  }
 }
</script>

父組件定義

父組件通過 slot-scope 來接受到子組件傳遞過來的數(shù)據(jù),然后判斷是否有 render 屬性來確定是否用要去自定義樣式覆蓋默認的 slot

  • 首先看傳遞給子組件的表頭數(shù)據(jù),可以看到,第二,三行列表中有一個render屬性,它是一個函數(shù)并返回一個 html 的字符串。
  • tableList就是普通的數(shù)據(jù),也就是數(shù)據(jù)的 key 值去渲染對應的數(shù)據(jù)
  • 圖片這列舉例子,當父組件通過 props 將 {label,prop,id,render} 傳遞給子組件后,子組件有通過 slot 將值傳遞回父組件。
    • 到這里有些人會有疑問,為什么要將數(shù)據(jù)這樣傳來傳去,因為我們在子組件中定義好了默認樣式,而父組件中需要判斷該值是否需要自定義樣式,去覆蓋子組件中的樣式。
    • 這些自定義樣式就是一開始,在render函數(shù)中返回的 html 字符串
    • 為啥 React 直接返回 jsx ,而Vue需要返回 html 字符串,因為react本身就是使用 JSX 來渲染模版的,最終都會通過 babel 編譯成 React.createElement ,而Vue是通過 template 來渲染模版的,這里通過定義 template 模版字符串,最終通過 v-html 來解析
  • 為什么這里有兩個 slot-scope ,第一個是 slot-item 的,組件內(nèi)部通過 slot-scope 將值傳遞出來。而第二個是 el-table-item 的,ui組件內(nèi)部同樣將數(shù)據(jù)通過 slot-scope 傳遞傳來。
  • 通過第一個 slot-scope 拿到 propList 中的定義的 render 函數(shù),通過第二個 slot-scope 拿到 table 組件內(nèi)部傳遞出來的數(shù)據(jù),將數(shù)據(jù)傳遞給 render 函數(shù)去生成自定義模版

最終通過 v-html 去解析生成的字符串模版

<slot-item :propList="propList" :tableList="tableList">
 <template slot-scope="{content}" v-if="content.render">
  <el-table-column :label="content.label">
   <template slot-scope="{$index,row}">
    <div v-html="content.render(row)"></div>
   </template>
  </el-table-column>
 </template>
</slot-item>
 export default {
  components:{
   SlotItem
  },
  data () {
   return { 
    propList:[
     {label:'姓名',prop:'name',id:1},
     {label:'圖片',prop:'pic',id:2,render:({pic})=>{
      return `<img style="width:30px;height:30px" src='${pic}' />`
     }},
     {label:'操作',prop:'operate',id:3,render:({text})=>{
      return `<div style="color:#999">${text}</div>`
     }},
    ],
    tableList:[
     {name:'章三',pic:'https://zh-static-files.oss-cn-hangzhou.aliyuncs.com//karazhan/content/poster/2019/11/16e30c192f6.png',text:'新增'},
     {name:'里斯',pic:'https://zh-static-files.oss-cn-hangzhou.aliyuncs.com//karazhan/content/poster/2019/11/16e30c2797e.png',text:'刪除'},
     {name:'網(wǎng)舞',pic:'https://zh-static-files.oss-cn-hangzhou.aliyuncs.com//karazhan/content/poster/2019/11/16e30c33144.png',text:'跳轉(zhuǎn)'},
    ]
   }
  }
 }
</script>

結(jié)尾

有了render屬性,可以想 ant-design 那樣簡潔的屬性 ui組件模版了!

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue3基于elementplus 簡單實現(xiàn)表格二次封裝過程

    vue3基于elementplus 簡單實現(xiàn)表格二次封裝過程

    公司渲染表格數(shù)據(jù)時需要將空數(shù)據(jù)顯示‘-’,并且對于每一列數(shù)據(jù)的顯示也有一定的要求,基于這個需求對element-plus簡單進行了二次封裝,這篇文章主要介紹了vue3基于elementplus 簡單實現(xiàn)表格二次封裝過程,需要的朋友可以參考下
    2024-05-05
  • vue實現(xiàn)路由監(jiān)聽和參數(shù)監(jiān)聽

    vue實現(xiàn)路由監(jiān)聽和參數(shù)監(jiān)聽

    今天小編就為大家分享一篇vue實現(xiàn)路由監(jiān)聽和參數(shù)監(jiān)聽,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • vue interceptor 使用教程實例詳解

    vue interceptor 使用教程實例詳解

    本文通過實例代碼給大家介紹了vue interceptor 使用,需要的朋友可以參考下
    2018-09-09
  • Vue 路由切換時頁面內(nèi)容沒有重新加載的解決方法

    Vue 路由切換時頁面內(nèi)容沒有重新加載的解決方法

    今天小編就為大家分享一篇Vue 路由切換時頁面內(nèi)容沒有重新加載的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue3中vue.config.js配置及注釋詳解

    vue3中vue.config.js配置及注釋詳解

    在Vue 3.0中,與2.0版本相比有一定的差別,最明顯的就是缺少了build、config文件夾,下面這篇文章主要給大家介紹了關(guān)于vue3中vue.config.js配置及注釋的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 關(guān)于vue中的ajax請求和axios包問題

    關(guān)于vue中的ajax請求和axios包問題

    大家在vue中,經(jīng)常會用到數(shù)據(jù)請求問題,常用的有vue-resourse、axios ,今天小編給大家介紹下axios的post請求 ,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-04-04
  • vuex刷新后數(shù)據(jù)丟失的解決方法

    vuex刷新后數(shù)據(jù)丟失的解決方法

    這篇文章主要給大家介紹了關(guān)于vuex刷新后數(shù)據(jù)丟失的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Vue Element-ui表單校驗規(guī)則實現(xiàn)

    Vue Element-ui表單校驗規(guī)則實現(xiàn)

    Element-ui表單校驗規(guī)則,使得錯誤提示可以直接在form-item下面顯示,無需彈出框,感興趣的小伙伴們可以參考一下
    2021-07-07
  • vue獲取form表單的值示例

    vue獲取form表單的值示例

    今天小編就為大家分享一篇vue獲取form表單的值示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • Vue3+Canvas實現(xiàn)簡易的貪吃蛇游戲

    Vue3+Canvas實現(xiàn)簡易的貪吃蛇游戲

    貪吃蛇作為一個經(jīng)典的小游戲,是很多人兒時的記憶,當時的掌機、諾基亞手機里面都有它的身影。本文將用Vue3?Canvas來復刻一下這款游戲,感興趣的可以了解一下
    2022-07-07

最新評論

囊谦县| 高雄市| 沁阳市| 长葛市| 广灵县| 六盘水市| 色达县| 兰西县| 织金县| 建昌县| 绥宁县| 额敏县| 丰县| 正安县| 遵化市| 龙海市| 县级市| 政和县| 信阳市| 隆子县| 襄汾县| 漳浦县| 兰考县| 宝丰县| 兴山县| 云梦县| 邛崃市| 德钦县| 子长县| 乌审旗| 杭锦旗| 汾西县| 泽州县| 汉沽区| 永宁县| 南华县| 宜章县| 高密市| 吴桥县| 道真| 淳化县|