情況是這樣的,項目用了eliment ui,并把table組件封裝了一個子組件,內(nèi)部片段的column是這樣的:
// 子組件內(nèi)部
<el-table-column v-for="(item,index) in fields" :key="index" :label="item.title" :width="item.width">
<template slot-scope="scope" v-html="">
{{ item.content ? item.content(scope.row) : scope.row[item.name] }} // 這一行
</template>
</el-table-column>
其中fields是數(shù)據(jù)的每個字段用到了循環(huán),字段的顯示內(nèi)容content()返回為文本時沒問題。
但是如果想自定義這個內(nèi)部的樣式,必須添加一個button,就不行了。一下是組件內(nèi)的data部分:
// 父組件的data:
...
fields : [
{title :'時間' ,width:"180",content:(row)=>{ // 這里字符是沒有問題的
return new Date(row.start).format("MM-dd hh:mm") + " ~ " + new Date(row.end).format("hh:mm D") + (row.clash !=null ? " [有沖突] " : "" )
}},
{name:"user_name" , title :'姓名' ,width:'80' },
{name:'product_name', title :'課程' , content:(row)=>{
return "<button>有問題的地方</button>"; //->求解的地方
}},
{name:'title', title :'課題'},
...
],
...
結(jié)果輸出的時候吧"<button>有問題的地方</button>"當文本輸出了。
就不知道怎么辦了。求解。大神在不?
https://cn.vuejs.org/v2/guide...
雙大括號會將數(shù)據(jù)解釋為普通文本,而非 HTML 代碼。為了輸出真正的 HTML,你需要使用 v-html 指令.
方法一:
基本解決,方法如下,使用了vue的 createElement 渲染函數(shù),但是需要改造一下。首先父組件data里這樣了:
{title :'課時簽到', content:function(h){
console.log(this.text);
return h( 'el-tag',{
attrs: { size : "mini" },
on: {
click: function (event) {
alert(event)
}
}
}, '搞定' );
}},
然后子組件,建了一個孫子組件:
```
// 模板部分
<template slot-scope="scope">
<node-content :content="item.content" :text="scope.row[item.name]" :row="scope.row"></node-content> // 孫子組件
</template>
// 子組件的compments 加上:
components: {
NodeContent: {
props : {
content:Function,
text:{},
row: {}
},
render: function render(h) {
// 如果有content函數(shù)就渲染,沒有就直接輸出文本。
if(this.content) return this.content.call(h,...arguments); // 就是這里。
else return h('span',this.text);
}
}
},
```
h就是 createElement() ,createElement語法很D疼,沒有直接寫標簽痛快。
基本解決,遺留問題是,如何把row,傳給父組件的content方法了。
**方法二**
完美解決,參考了elementui里的tree的寫法。
在父組件的data里這么寫,定義一個渲染內(nèi)容
```
{title :'課時簽到e', content:(row)=>{
return (
<el-button onClick={()=> this.showSigns(row.id) } type="text" size="small" ></el-button>
)
} },
然后在子組件里:
模板:
<template slot-scope="scope">
<node-content :content="item.content" :row="scope.row"></node-content>
</template>
components里:
components: {
NodeContent: {
props: {
content:{},
row:{},
},
render: function render(h) {
return this.content(this.row);
}
}
},
{name:'address', title :'課程' , content:(row)=>{
return <button on-click={($event) => this.handleClick($event) } >有問題的地方</button>; } }
},
NodeContent: {
props: {
node:'',
},
render(h) {
const node = this.node
return (
<span >{ node.item.content ? node.item.content(node.row) : node.row[node.item.name] }</span>
);
}
}
},
<template slot-scope="scope" >
<node-content :node="{'item':item,'row':scope.row}" ></node-content>
</template>
我這樣可以,不知道@moonwalkercui 怎么解決的,能不能貼出了,是否可以在 content:(row)=>{ }里面直接寫 render()
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fē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é)及管理工作。
精通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)師。