自定义表格表头----element(疑难杂症一)

尽管element 表格有相关属性方法的说明,但是总有那么几个是难以理解的。这篇主要针对自定义表格表头的 render-header 方法。

例子:

(1)基础表格



  

 (2)添加单选列


	
 

        效果

自定义表格表头----element(疑难杂症一)_第1张图片

 (3)表格之间的单选: 

 

   只要couponId == id ;就选中

  

selectChecked(index,row){
   this.couponId = row.id ;
}

  到此,表格之间的单选已经实现

     单选列表头是不是感觉选择有点不合时宜,更想要和下面的单选按钮一样那就OK了。没错,是时候大展身手了:render-header

   (3)render-header 登场 在选择列添加以下方法

 

         在methods:编写方法

modifiedCaption(h, { column, $index }){
		return h('span', [
		 h('span',column.label),
			h('div',
			 {
				 class:this.couponId==0?'red-star-icon':'red-star-icon-select',
				 on: {
				      click: this.change
				 }
			}),
		 ]);
},

 css 是随便写的,仅供参考

.red-star-icon{
	position: relative;
	width:14px;
	height:14px;
	border:1px solid #ccc;
	border-radius:100%;
	padding-right:0;
	padding-left:0px !important;
	margin-top:8px;
	margin-left:-13px;
	background:#fff
}
.red-star-icon::after,.red-star-icon-select::after{
	width: 4px;
    height: 4px;
    border-radius: 100%;
    background-color: #fff;
    content: "";
    position: absolute;
    left: 50%;
    top: 50%;
    margin-top: -2px;
    margin-left: -2px;
}
.red-star-icon-select{
	position: relative;
	width:14px;
	height:14px;
	border:1px solid #ccc;
	border-radius:100%;
	padding-right:0;
	padding-left:0px !important;
	margin-top:8px;
	margin-left:-13px;
	background:red;
	border-color: #409EFF;
    background: #409EFF;
}

效果如下:

自定义表格表头----element(疑难杂症一)_第2张图片

果真是想要的效果。但是希望只有选中,她也被选中,在class运用三元运算符即可,

(4) 点击头部按钮取消选中,只需要初始化就OK

change(val) {
 if(this.couponId !== '' || this.couponId != null){
	this.couponId = 0 ;
	}
},

想要的效果已经实现:附全码

html


js var Main = { data() { return { couponId:0, tableData: [{ id:1, date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, { id:2, date: '2016-05-04', name: '王小虎', address: '上海市普陀区金沙江路 1517 弄' }, { id:3, date: '2016-05-01', name: '王小虎', address: '上海市普陀区金沙江路 1519 弄' }, { id:4, date: '2016-05-03', name: '王小虎', address: '上海市普陀区金沙江路 1516 弄' }] } }, methods:{ change(val) { if(this.couponId !== '' || this.couponId != null){ this.couponId = 0 ; } }, modifiedCaption(h, { column, $index }){ return h('span', [ h('span',column.label), h('div', { class:this.couponId==0?'red-star-icon':'red-star-icon-select', on: { click: this.change } }), ]); }, selectChecked(index,row){ this.couponId = row.id ; } } } var Ctor = Vue.extend(Main) new Ctor().$mount('#app') css .red-star-icon{ position: relative; width:14px; height:14px; border:1px solid #ccc; border-radius:100%; padding-right:0; padding-left:0px !important; margin-top:8px; margin-left:-13px; background:#fff } .red-star-icon::after,.red-star-icon-select::after{ width: 4px; height: 4px; border-radius: 100%; background-color: #fff; content: ""; position: absolute; left: 50%; top: 50%; margin-top: -2px; margin-left: -2px; } .red-star-icon-select{ position: relative; width:14px; height:14px; border:1px solid #ccc; border-radius:100%; padding-right:0; padding-left:0px !important; margin-top:8px; margin-left:-13px; background:red; border-color: #409EFF; background: #409EFF; }

直接在elm 官网例子中把各个部分复制黏贴就可以看到效果。https://jsfiddle.net/hzq8240a/1/

注意事项:

在写render-header函数,如果要写标签内容,不要像这样:modifiedCaption(h, { column, $index }){ return h('span', [ h('div','aaa', { on: { click: this.test } }), ]); }, test(){ console.log(111) } },这样写的话是监听不到的。应该这样写

modifiedCaption(h, { column, $index }){return h('span', [h('div',{domProps: {innerHTML: 'aaa'},on: {click: this.test}})],);}, test(val) {console.log('111')},具体语法看:https://cn.vuejs.org/v2/guide/render-function.html

 

 

你可能感兴趣的:(vue,element)