vue實(shí)現(xiàn)表格組件(實(shí)現(xiàn)多選功能)

其中多選功能參考:https://jsfiddle.net/muchen/7r358jmu/2/

來個(gè)效果

名稱 年齡 性別
張三 11
李四 12
王五 13 -

當(dāng)然凛澎,上訴只是要實(shí)現(xiàn)的效果焙蹭,還要再加上多選功能

淺談表格

表格組件比較沒有技術(shù)含量,主要掌握vue的v-for的使用就可以了刚照,但是多選功能卻比較復(fù)雜肛根,然而這個(gè)復(fù)雜的問題卻被上述網(wǎng)址所展示的代碼優(yōu)雅的解決了,所以這個(gè)組件會(huì)是一個(gè)非常值得學(xué)習(xí)的代碼

主要講多選哈原押,其他的就帶過了

多選功能

https://segmentfault.com/q/1010000006893364?_ea=1172273里面的回答,其原理:

  1. 給每個(gè)數(shù)據(jù)增加一個(gè)屬性偎血,selected
  2. 在 computed 里面增加一個(gè) allSelected 的計(jì)算屬性
  3. 定義該屬性的 get & set
  4. 把a(bǔ)llSelected 綁定到 thead 的 checkbox 上

實(shí)現(xiàn)的效果:

  1. tbody 里面每行都選中诸衔,thead checkbox自動(dòng)選中
  2. thead checkbox選中狀態(tài)下 tbody某一行不選擇,thead 選中自動(dòng)取消
  3. thead checkbox點(diǎn)擊選中颇玷,tbody所有行選中
  4. thead checkbox點(diǎn)擊取消選中 tbody所有行不選中

好了笨农,上訴文字都是抄襲,還得來點(diǎn)真貨帖渠,是自己修改而成的:

template

<template>
<div class="mtable">
    <table class="table" >
        <thead>
            <th v-if="mulSelect" >
                <div><input type="checkbox" v-model="allSelected" /></div>
            </th>
            <th v-for="field in fields" >
                {{field.name}}
            </th>
        </thead>
        <tbody>
            <tr v-for="data,index in rows" >
                <td v-if="mulSelect" >
                    <div><input type="checkbox" v-model="items[index].seleced" /></div>
                </td>
                <td v-for="field in fields" >
                    {{data[field.name]}}
                </td>
            </tr>
        </tbody>
    </table>
</div>
</template>

其中mulSelect谒亦,rows,field是父組件傳遞的參數(shù)空郊,mulSelect用來控制是否顯示多選份招,rows是json格式的數(shù)據(jù),fields包含有屬性名稱

script

<script>

function getItems(){
    var items = [];
    for(var i=0;i<100;i++){//定義支持最大行數(shù)為100行
        items.push({
            seleced:false
        })
    }
    return items
}

const ITEMS = getItems()

export default {
    name: 'Table',
    data(){
        return {
            "items":ITEMS       
        }
    },
    props:[
        "fields","rows","mulSelect"
    ],
    computed:{
        allSelected:{
            get: function () {
            return this.items.reduce(function(prev, curr) {
                return prev && curr.seleced;
            },true);
          },
          set: function (newValue) {
            this.items.forEach(function(item){
                item.seleced = newValue;
            });
          }
        }
    }
}
</script>

其中g(shù)etItems可以看出狞甚,只支持100行锁摔,有需要的話可以自行調(diào)整,廢話不多說了哼审,上樣式:

css

<style>
table.table{
    margin: 0 auto;
    empty-cells:show; 
    border-collapse: collapse;
    width: 100%;
}


.table tr{
    
}
.mtable{
    width: 100%;
    max-height: 450px;
    overflow: auto;
}
.table td,.table th{
    border: 1px #eee solid;
    height: 30px;
    line-height: 30px;
    min-width: 64px;
    overflow: hidden;
}

.table tr td:first-child,.table thead th:first-child{
  width: 32px;
  padding: 0px;
}
.table input[type=checkbox]{
    zoom: 180%;
    margin-top: 8px;
}
</style>

父組件調(diào)用

...
<Table :fields="fields" :rows="rows" :mulSelect="mulSelect" />
...

以下代碼是必須的:

<script>
import Table from '@/components/Table'
...
components:{
    "Table":Table
}
...

好困吶谐腰,還落下什么呢?對(duì)了涩盾,還有張三和李四:

//數(shù)據(jù)格式
const fields = [
    {name:"姓名"},{name:"年齡",name"性別"}
]
const rows=[
    {"姓名":"張三","年齡":11,"性別":"男"},
    {"姓名":"李四","年齡":2,"性別":"女"},
    {"姓名":"王五","年齡":13,"性別":"-"}
]

該睡了十气。。旁赊。



另外桦踊,分頁組件,請(qǐng)查看本人另一篇文章vue實(shí)現(xiàn)分頁組件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末终畅,一起剝皮案震驚了整個(gè)濱河市籍胯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌离福,老刑警劉巖杖狼,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異妖爷,居然都是意外死亡蝶涩,警方通過查閱死者的電腦和手機(jī)歹撒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門蹲坷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人办绝,你說我怎么就攤上這事次舌∠ㄈ粒” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵彼念,是天一觀的道長(zhǎng)挪圾。 經(jīng)常有香客問我,道長(zhǎng)逐沙,這世上最難降的妖魔是什么哲思? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮吩案,結(jié)果婚禮上棚赔,老公的妹妹穿的比我還像新娘。我一直安慰自己徘郭,他們只是感情好靠益,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著崎岂,像睡著了一般捆毫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冲甘,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天绩卤,我揣著相機(jī)與錄音,去河邊找鬼江醇。 笑死濒憋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陶夜。 我是一名探鬼主播凛驮,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼条辟!你這毒婦竟也來了黔夭?” 一聲冷哼從身側(cè)響起宏胯,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎本姥,沒想到半個(gè)月后肩袍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡婚惫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年氛赐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片先舷。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艰管,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蒋川,到底是詐尸還是另有隱情牲芋,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布尔破,位于F島的核電站街图,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏懒构。R本人自食惡果不足惜餐济,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胆剧。 院中可真熱鬧絮姆,春花似錦、人聲如沸秩霍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铃绒。三九已至鸽照,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颠悬,已是汗流浹背矮燎。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赔癌,地道東北人诞外。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像灾票,于是被迫代替她去往敵國(guó)和親峡谊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容