记录--iview 使用爬坑
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

前段时间公司需要开发一个后台管理系统,时间比较急迫,一两天时间。想一想自己一点一点的搭建起来可能性不太大,就想着有没有现成的可以改一改,就找到了基于Vue.js和iview组件库的现成后台,拿来改改就可以了 iview admin。
一、介绍:
1.iview UI组件库是基于Vue.js的UI组件库(相比之下大家都知道的)。
2. iview admin 引用iview admin文档的介绍:iView-admin是iView生态中的成员之一,是一套采用前后端分离开发模式,基于Vue的后台管理系统前端解决方案。iview_admin预览 iview_admin文档 iview_admin github地址
二、使用:
1. 目录结构:

从github克隆下来的原始项目就是这样一个结构。
config/ (项目开发配置文件,主要用于区分开发环境和生产环境)
node_modules/ (项目依赖)
public/ (存放主入口文件 index.html)
src/ (资源文件,这里面内容比较多)
还有一个比较重要的文件就是根目录下的:vue.config.js
这个是vue配置文件,和vue cli2.x不通,这里使用的是vue cli3,所有的webpack配置都在这里配置。
其他的一些文件和文件夹一般使用还用不到。
2. config/
config/ 文件夹下面有两个文件:
env.js
export default 'development'
url.js
import env from './env'
const DEV_URL = 'https://www.easy-mock.com/mock/5add9213ce4d0e69998a6f51/iview-admin/'const PRO_URL = 'https://produce.com'
export default env === 'development' ? DEV_URL : PRO_URL
这里主要是用于区分开发环境和线上环境的请求接口基础url。
3. public/
public/ 文件夹下面只有一个文件,那就是index.html内容输出的入口文件。
4. src/
4-1. src/api/
其中data.js 中是所有数据请求的函数,routers.js路由请求函数,user.js是用户登录、获取用户信息、退出登录的请求方法。在iview admin中是将所有的请求方法分类放在一起,哪里需要再在哪里调用,而不是散布在各个页面里面,这样利于维护修改。
比如user.js中:
4-2. src/assets/
src/assets/ 下存放的都是图片等一些静态资源等等。
4-3. src/components/
src/components/ 下面是iview admin已经封装好的一些可以直接调用的组建。
4-4. src/config/
项目内配置文件,里面已经有的配置是cookie存储时长,是否使用国际化配置。
4-5. src/directive/
一直项目自定义指令
4-6. src/libs/
在这里主要在强调一下,在axios.js中iview_admin作者对请求方法进行了封装处理:
这里对响应进行了拦截处理,如果你在使用时成功请求后并没有约定好返回码字段为code或者成功后要返回code:200 那你使用他的请求就算在控制台Network看到请求成功数据返回,但是你打印出来的结果会是false,要不就和后台按照他的约定好,要不就改一下源码。
tools.js和util.js都是一下工具函数。
4-7. src/locale/
存放国际化配置文件,如果不使用国际化,则不需要关心。
4-8. src/mock/
mock数据,在没有接入真实开发环境时,克隆下来的项目使用的都是mock的加数据。
4-9. src/router/
routers.js 路由配置文件,在这里需要注意用户的权限配置:
例如:
用户的权限配置必须是一个数组。
4-10. src/store/
这里是整个项目状态管理的地方,使用了vuex状态管理工具,不了解的同学可以看看 vux官方文档。
4-11. src/view/
这里面就是我们要编写的展示页面了。
三、render的使用:
新手使用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是这么写的:

这一切看起来那么的美好~~
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 !
本文转载于:
https://juejin.cn/post/6844903655926136846
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

记录--iview 使用爬坑的更多相关文章
- mybatis-generator 详细配置及使用,爬坑记录
mybatis-generator 详细配置及使用,爬坑记录 提示:如果不成功一定是项目路径和 数据库配置出问题,本篇基于 MySQL 8.0.13,调试没有问题. 如果失败,建议使用相同的项目结构, ...
- 03、Swagger2和Springmvc整合详细记录(爬坑记录)
时间 内容 备注 2018年6月18日 基本使用 spirngmvc整合swagger2 开始之前这个系列博文基本是,在项目的使用中一些模块的内容记录,但是后期逐渐优化,不单单是整合内容. swagg ...
- centos7安装Mysql爬坑记录
centos7安装Mysql爬坑记录 查看是否已安装 使用下列命令查看是否已经安装过mysql/mariadb/PostgreSQL 如果未安装,不返回任何结果(ECS的centos镜像默认未安装 ...
- elasticsearch 单节点搭建与爬坑记录
elasticsearch 单节点搭建与爬坑记录 prepare 虚拟机或者云服务器(这里用的是阿里云ECS) linux---centos7 安装完毕的jdk 相应的安装包(在https:/ ...
- mint-ui之picker爬坑记
picker的数据来源为动态获取时,数据无法正常渲染!因为方法不对,所以坑大了!深刻地体会到'业不精,我之过',谨以此文,深刻地记录一下踩坑及爬坑的整个过程,以便日后不再入坑,也给后来者提供一下参考 ...
- mpvue 小程序开发爬坑汇总
<!-- 小程序的爬坑记录 --> 1 微信小程序之动态获取元素宽高 var obj=wx.createSelectorQuery(); 2 微信小程序图片自适应 <image cl ...
- Tinker + Bugly + Jenkins 爬坑之路
前阵子 Android 端的线上崩溃比较多,热修复被提上日程.实现方案是 Tinker,Jenkins 打包,最后补丁包上传到 Bugly 进行分发.主要在 Jenkins 打包这一块爬了不少坑,现记 ...
- 【饿了么】—— Vue2.0高仿饿了么核心模块&移动端Web App项目爬坑(三)
前言:接着上一篇项目总结,这一篇是学习过程记录的最后一篇,这里会梳理:评论组件.商家组件.优化.打包.相关资料链接.项目github地址:https://github.com/66Web/ljq_el ...
- 【爬坑系列】之vxlan网络实现
linux 内核从3.7之后就内部集成了vxlan功能,所以可以使用linux内核提供的vxlan功能,经过配置创建vxlan网络. 而从Docker自Docker Engine 1.9之后,就自带o ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
随机推荐
- WPF仿win10加载动画 可用于loading加载
直接上xaml 没有cs代码 (自己琢磨了好久感觉这样能接受) <UserControl x:Class="WpfApp1.Loading" xmlns="http ...
- SavedStateHandle的介绍----ViewModel不具备保存状态数据的功能
LiveData本身不能在进程销毁中存活,当内存不足时,Activity被系统杀死,ViewModel本身也会被销毁. 为了保存LiveData的数据,使用SavedStateHandle. 事故场景 ...
- Js获取数据类型
Js获取数据类型 JavaScript有着七种基本类型String.Number.Boolean.Null.Undefined.Symbol.Object,前六种为基本数据类型,Object为引用类型 ...
- VuePress + Github Pages 搭建文档博客
说明 最近想把常用的一些干货知识点都集中起来,方便发布和查找.相当于创建一个自己的知识库,我就叫它Java技术文档.虽然博客写文档也挺方便,但是在于文档的集中阅读和管理方面还是不够简洁和快速.此处就以 ...
- junit运行Parameterized参擞化测试
Parameterized (参数化)的测试运行器允许你使用不同的参数多次运行同一个侧试. 运行此测试的必备条件: 1.必须使用@RunWith(Parameterized.class) 2.必须声明 ...
- 启动MySQL5.7服务无法启动或Table 'mysql.plugin' doesn't exist
首先说一下我这个是mysql5.7.16免安装版,不过这个问题对于5.7版本应该都适用. 问题重现: 安装过程也说一下吧: 1.将下载的压缩文件解压到指定目录, 我的是:E:\program\ ...
- win32 - RegisterRawInputDevices 和 GetRawInputData
RegisterRawInputDevices 可以注册鼠标或者键盘等输入的信息,然后GetRawInputData可以获取传来的WM_INPUT消息中的输入信息. 代码参考: #include &l ...
- 团队协作如何确保项目Node版本的一致性?
前言 想必大家在工作过程中都遇到过node版本带来的各种各样的问题,对于团队协作项目,你不能保证所有人的本地node版本都相同,所以在项目文档中往往会写上以下内容: 为与线上环境一致,请保证以下版本 ...
- [Android逆向]Exposed 破解 jwxdxnx02.apk
使用exposed 遇到了一些坑,这里记录一下 源码: package com.example.exposedlesson01; import de.robv.android.xposed.IXpos ...
- django从配置文件中读取数据库信息
创建配置文件my.cnf [client] database=django_db user=root password=123456 host=127.0.0.1 port=3306 settings ...