iview的render函數使用


 

render渲染函數詳解 https://www.cnblogs.com/weichen913/p/9676210.html

iview表格的render函數作用是自定義渲染當前列,權限高於key,所以使用了render函數,那么表格的key值就無效了。render函數傳入兩個參數,第一個是 h,第二個是對象,包含 row、column 和 index,分別指當前單元格數據,當前列數據,當前是第幾行。

具體用法:

render:(h,params) => {
return h(" 定義的元素 ",{ 元素的性質 }," 元素的內容"/[元素的內容])
}
1、一般情況:如果只有單文本情況下,直接生成數據即可,

<template>
<Table border :columns="columns7" :data="data6"></Table>
</template>
<script>
export default {
data () {
return {
columns7: [
{
title: 'Name',
key: 'name'
},
{
title: 'Age',
key: 'age'
},
{
title: 'Address',
key: 'address'
},
{
title: 'Action',
key: 'action',
width: 150,
align: 'center',
render: (h, params) => {
return h('div', [
h('Button', {
props: {
type: 'primary',
size: 'small'
},
style: {
marginRight: '5px'
},
on: {
click: () => {
this.show(params.index)
}
}
}, '查看'),
h('Button', {
props: {
type: 'error',
size: 'small'
},
on: {
click: () => {
this.remove(params.index)
}
}
}, '刪除')
]);
}
}
],
data6: [
{
name: 'John Brown',
age: 18,
address: '北京市',
city:'北京市市轄區',
disrect:'朝陽區公園南門門口'
},
{
name: 'Jim Green',
age: 24,
address: '湖北省',
city:'武漢市',
disrect:'武昌區武漢大學北門食堂'
},
{
name: 'Joe Black',
age: 30,
address: '江蘇省',
city:'蘇州市',
disrect:'昆山市張浦鎮新吳街'
},
{
name: 'Jon Snow',
age: 26,
address: '上海市',
city:'陸家港',
disrect:'上海東方明珠立交橋'
}
]
}
},
methods: {
show (index) {
this.$Modal.info({
title: 'User Info',
content: `Name:${this.data6[index].name}<br>Age:${this.data6[index].age}<br>Address:${this.data6[index].address}`
})
},
remove (index) {
this.data6.splice(index, 1);
}
}
}
</script>
<style>
.ivu-table-wrapper{
width: 800px;
margin: 0 auto;
}
</style>


2、自定義文本,並且給文本加上樣式

依照上例:

{
title: 'Age',
key: 'age',
render:(h,params)=>{
return h('span',{
style:{
color:"red",
fontSize:'22px'
}
},params.row.age)
}
上面的例子給年齡加了字體顏色和字體大小,年齡數據被包含在span標簽里,同時我們可以在style里面設置相應的字體屬性。(注:在style里面寫屬性,不能使用橫杠,有橫杠的應該用大寫,比如fontSize);同時我們也可以在后面為其添加單位

{
title: 'Age',
key: 'age',
render:(h,params)=>{
return h('span',{
style:{
color:"red",
fontSize:'22px'
}
},params.row.age+'歲')
}
還是上例,我們改變地點,將地點的省市區都顯示在表格上

{
title: 'Address',
key: 'address',
render:(h,params)=>{
return h('span',{},params.row.address+params.row.city+params.row.disrect)
}


3、添加按鈕,或將按鈕變為icon圖標

比如上例表格,添加的兩個按鈕

render: (h, params) => {
return h('div', [
h('Button', {
props: {
type: 'primary',
size: 'small'
},
style: {
marginRight: '5px'
},
on: {
click: () => {
this.show(params.index)
}
}
}, '查看'),
h('Button', {
props: {
type: 'error',
size: 'small'
},
on: {
click: () => {
this.remove(params.index)
}
}
}, '刪除')
]);
}
props表示元素屬性,有type,size等屬性;style用來改變元素的樣式;on表示元素的事件名,如果是點擊事件,就用click,如果是失去焦點事件,則是blur。

引申:如果使用icon圖標來代替Button組件,寫法類似,只不過將元素名稱換成icon,props里的type換成對應的圖標名稱即可。

render: (h, params) => {
return h('a', [
h('a',[
h('Icon', {
props: {
type: 'ios-search',
size:'18',
},
attrs:{
title:'查看'
},
style: {
cursor:'pointer',
color:'#009688',
fontSize:'22px',
},
on: {
click: () => {

}
}
}),
]),
]);
}
此時,末尾的查看等文字不可見;如果想要當鼠標移上去的時候,顯示圖標含義,那么再加上attrs屬性,給其title名即可。

4、添加屬性,讓文字在一排顯示,超過省略號表示

表格提供了一個ellipsis屬性,設置為true,可以讓文字在一排顯示,超過表格寬度則用省略號代替。使用這個屬性的話,當鼠標移上去時,是不能顯示詳細信息的。

表格還提供了一個tooltip屬性,設置為true時,可以讓文字在一排顯示,超過表格寬度則用省略號代替,同時當鼠標移上去時,可以顯示詳細信息。

但這個屬性在使用了render函數自定義下是無效的,需要再做處理。比如,我們將上例中的地址改變一下

{
title: 'Address',
key: 'address',
render:(h,params)=>{
let texts = '';//表格顯示的文字
texts = (params.row.address+params.row.city+params.row.disrect).substring(0, 6) + ".....";
let str='';//鼠標移入時顯示的文字
str=params.row.address+params.row.city+params.row.disrect;
return h(
"tooltip",
{
props: {
placement: "bottom",
transfer: true,
marginLeft:'-30px'
}
},
[
texts,
h(
"span",//控制文字樣式,可以換行顯示
{
slot: "content",
style: { whiteSpace: "normal", wordBreak: "break-all" }
},
str
)
]
)
}
}


5、表格里嵌入下拉框或下拉菜單

在表格里嵌入下拉框或下拉菜單也是一種常見的設計,實現方式如下:

{
title: '下拉',//縱列表頭(類似於th)
width:140, //列表每一格的寬度
align: 'center', //ivew里面的寫法,不用理會
key: 'region', //ivew里面的寫法,不用理會
render: (h, params) => {
return h('Select', {
on: {
'on-change':(event) => {
console.log(event);
}
},
},
this.volumeTypes.map(function(type){//這個數組需要在data中定義,里面是一個個對象,每個對象里面應當包含value屬性(因為要用到)
return h('Option', {
props:{
value:type.label,//點擊事件的值
label:type.value//下拉框的值
}
}, type);
})
)
},
}
volumeTypes在data里的定義數組
volumeTypes:[
{
value:'a',
label:1
},
{
value:'b',
label:2
}
]


在控制台打印為1,2.顯示a,b。需要注意的是:在這個change事件中,‘on-change’需要拆開顯示,否則不生效,像網上有的是連在一起‘onChange’來顯示的,沒有實現成功。

在表格中放入下拉菜單的方法大同小異

{
title: '品種',
width:100,
align: 'center',
key: 'varieties',
render: (h, params) => {
return h('Dropdown',{
props:{
trigger:"click"
},
on:{
'on-click':(value)=>{
console.log(value);//value和下面選項的name對應
}
} //iview組件內部的屬性定義在其標簽的對象里
}, [//盒子內部其他標簽元素放入數組中
h('a',[//創建一個a標簽,a標簽里面又有元素,繼續放入后面數組
h('span','下拉'),//span中的內容
h('Icon',{
props: {
type: 'md-arrow-dropdown',
size:'18'
}
})
]),
h('DropdownMenu',{//創建一個和a標簽同級的標簽
slot:"list"//iview組件內部的屬性定義在其標簽的對象里
},
this.dropdownItems.map(function(type){//把map看作循環,type看作循環的每一項
return h('DropdownItem',{
props:{
name:type.val
}
},type.val)
})
)
]);
}
},
對於render函數而言,我們可以將h看作一個創建元素的字段,創建好這個元素之后,需要添加樣式或者做其他操作,后面跟着一個對象(里面是屬性和方法)或者數組(該元素的子元素)就行。涉及到的幾個屬性無外乎props,style,on,attrs等
---------------------
作者:weixin_38384967
來源:CSDN
原文:https://blog.csdn.net/weixin_38384967/article/details/83142348
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM