博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iview render的使用
阅读量:7114 次
发布时间:2019-06-28

本文共 5183 字,大约阅读时间需要 17 分钟。

新手使用iview表格中的render也许会遇到的问题

iview的使用和element-ui相似。但在表格中控件的使用上两者有很大不同。element-ui在表格中是用插槽渲染模板,而iview是使用传统的render渲染HTML页面。

使用element-ui的好处是,它相对比较成熟,也就是所谓的坑少功能强。但是在表格中使用控件(Select, input, button, switch等)时,由于是模板渲染所以冗余代码较多,特别遇到每列都有控件的,就不够简洁。

但是iview使用render虽然简洁,可是按照官方的例子很容易一不小心进坑。

以下是官网文档

{                    title: 'Name',                    key: 'name',                    render: (h, params) => {                        return h('div', [                            h  ('Icon', {                                props: {                                    type: 'person'                                }                            }),                            h('strong', params.row.name)                        ]);                    }                },                {                    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)                                    }                                }                            }, 'View'),                            h('Button', {                                props: {                                    type: 'error',                                    size: 'small'                                },                                on: {                                    click: () => {                                        this.remove(params.index)                                    }                                }                            }, 'Delete')                        ]);                    }                }复制代码

非常易懂,其中render里创建的标签 Icon、Button 等都是iview的控件,第一次使用时的我照葫芦画瓢,使用 Select、Switch。双双碰壁。

从根源上抓问题就是 render 函数了,它其实就相当于 creatElement 创建一个标签,而 Icon、Button 这些控件渲染之后标签名刚好就是本身;但是 Select、Switch 渲染之后的 HTML 其实是 span 或者 div 标签,然后 class 名上绑定样式和事件。

所以不推崇这样绑定标签,而是绑定控件,也就是 import 进来的控件。

正确用法为:

{                    title: 'Name',                    key: 'name',                    render: (h, params) => {                        return h('div', [                            h  (Icon, {                                props: {                                    type: 'person'                                }                            }),                            h('strong', params.row.name)                        ]);                    }                },                {                    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)                                    }                                }                            }, 'View'),                            h(Button, {                                props: {                                    type: 'error',                                    size: 'small'                                },                                on: {                                    click: () => {                                        this.remove(params.index)                                    }                                }                            }, 'Delete')                        ]);                    }                }复制代码

好像没啥区别?对没错把引号去掉。引号里面写标签名,什么 div、span 那些,整个控件传进来的时候不要引号。

关于 Select

既然说到iview的table了那就说说Select这个控件吧。做项目的时候几乎所有人都踩到了同一个坑 --> 咦?!我的id传回来了怎么没绑上去嘞!这个坑真的难找,我们看看官方文档中,Select是这么写的:

我们再看看 iview 的 Select.vue 源码:

这一切看起来那么的美好~~

but !!!!! 我怎样在绑定的时候赋上number类型的值捏?

一般的,我们如果想v-model输出number值,我们会这么做:

<input v-model.number="count" type="number">

so..... iview 中 Select 的文档里并木有 type 这个 props , 自己加肯定是不行的。所以number类型的值无法绑上去吖......, 默认类型都是string。这会造成接口给你个 10, 你的 option 里对应的是 '10',然后默认值变成了空。

这里我实在没想到解决办法,我就.....我就默默地把接口传回来的数值类型通通toString()了 ( T-T 委屈 ,希望有小伙伴能给出更好的方法,不要酱紫暴力 )

另外Select真的是奇怪耶!文档上写的是:

非 template/render 模式下,需使用 i-select、i-option

然而事实是:

管你什么模式都需要用 i-select、i-option !

另外,使用 iview 时存在诸多兼容问题,大多出现在 Select 上。比如 -->

我们的代码是通过 jekins 构建到正式环境上的,我们本地 run 没问题, build 之后 run 也没问题,可是......我们放到 jekins 上去构建,好了嘛 Select 的框都看不到还谈值???!(T-T 委屈,后来没办法就把组件换成 element-ui 了, 有小伙伴知道这个问题能否告知感激不尽T-T)

转载于:https://juejin.im/post/5b20d8b06fb9a01e895aafe0

你可能感兴趣的文章
单IP无TMG拓扑Lync Server 2013:活动目录
查看>>
3.VMware vsphere 5.0新体验-安装VMware Center
查看>>
趣题: 一道面试题的解法
查看>>
Java Scoket之java.io.EOFException解决方案
查看>>
Oracle分析函数四——函数RANK,DENSE_RANK,FIRST,LAST…
查看>>
Android应用程序启动过程源代码分析(5)
查看>>
Linux桌面版横评:八、中标普华桌面Linux 3.0.1
查看>>
让UpdatePanel支持文件上传(5):支持页面重定向的HttpModule
查看>>
Java线程:新特征-阻塞栈
查看>>
CentOS 5.5升级内核到2.6.35.4
查看>>
查询整个数据库中某个特定值所在的表和字段的方法
查看>>
JS把数组中相同元素组合成一个新的数组问题
查看>>
《Linux内核设计与实现》读书笔记(三)- Linux的进程
查看>>
AngularJS快速入门指南08:表格
查看>>
C++矩阵运算库推荐
查看>>
在存储过程中编写正确的事务处理代码(SQL Server 2000 & 2005)
查看>>
Android 控件在布局中按比例放置[转]
查看>>
内核通知链 学习笔记 【转】
查看>>
Input Method of Win32 System
查看>>
count(*) VS count(X)
查看>>