我用element封裝了一個table組件。其中columns是從父組件傳過來的
<el-table
:data="tableData"
stripe
border
stripe
fit
style="width: 100%"
class="self-table"
>
<el-table-column
v-for="(column, index) in columns "
:prop="column.prop"
:label="column.label"
:width="column.width"
:key="index"
>
</el-table-column>
</el-table>
現(xiàn)在我想通過直接控制columns,而不用改變上面這個自定義的組件,實現(xiàn)列內(nèi)容的自定義,比如說單元格里面是一個可編輯的input框,有沒有什么方法可以實現(xiàn)呢?
上面的評論好像都沒有關(guān)注重點,重點是要通過columns來定義列顯示,而不必改變自定義的組件本身??戳艘幌耰view的源碼,它是將createElement方法傳到了columns的render方法里,通過vue的render渲染函數(shù)實現(xiàn)了組件內(nèi)容的自定義。下面把關(guān)鍵代碼貼一下。
自定義組件
<el-table
:data="tableData"
stripe
border
stripe
fit
style="width: 100%"
class="self-table"
>
<el-table-column
v-for="(column, index) in columns "
:label="column.label"
:width="column.width"
:key="index"
>
<template slot-scope="scope">
<expand
v-if="column.render"
:render="column.render"
:row="scope.row"
:index="index"
:column="column"
>
</expand>
<span v-else>
{{scope.row[column.prop]}}
</span>
</template>
</el-table-column>
</el-table>
expand組件
export default {
name: 'TableExpand',
functional: true,
props: {
row: Object,
render: Function,
index: Number,
column: {
type: Object,
default: null,
},
},
render: (h, ctx) => {
const params = {
row: ctx.props.row,
index: ctx.props.index,
}
if (ctx.props.column) params.column = ctx.props.column
return ctx.props.render(h, params)
},
}
需要自定義時的columns
{
prop: 'auther',
label: '作者',
width: '180',
render: (h, params) => {
return h('input', {
style: {
width: '100%',
height: '30px',
},
})
},
},通過 Scoped slot 可以獲取到 row, column, $index 和 store(table 內(nèi)部的狀態(tài)管理)的數(shù)據(jù)。
寫個template,通過scope.row得到這一行的數(shù)據(jù),在template寫html
<el-table-column label="具體需求">
<template slot-scope="scope">
<div class="content-rowspan">
<div v-for="(list,index) in scope.row.lists">
<p v-show="scope.row.show">
{{list}}
<el-button class="delelist" type="danger" size="small" @click="delelist(tableData1,scope.$index,index)">刪除</el-button>
</p>
<el-input type="textarea" :autosize="{ minRows: 2, maxRows: 4}" v-show="!scope.row.show" v-model="scope.row.lists[index]"></el-input>
</div>
<div><el-button size="small" type="primary" icon="plus" @click="addlist(tableData1,scope.$index)"></el-button></div>
</div>
</template>
</el-table-column>北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。