简介
- 默认基于
v2.x
版本
使用
注意点
Tree
组件在动态网节点中加入数据后(往一个数组中插入元素),点击新节点时会报错。此时需要重新赋值此数组属性:this.treeList = JSON.parse(JSON.stringify(this.treeList))
(可能是 treeList 里面的元素改变并不会触发 vue 的渲染)- 使用
:prop
传递数据格式为数字、布尔值或函数时,必须带:
(兼容 String 除外,具体看组件文档) (1) prop 参数如果直接初始化则之后不可修改,只有传入变量才可修改 (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18<!-- (1) -->
<Page :current="1" :total="100"></Page>
<Select v-model="sex" placeholder="请选择">
<Option :value="1">男</Option>
<Option :value="2">女</Option>
</Select>
<Radio-group v-model="status">
<Radio :label="1">是</Radio>
<Radio :label="0">否</Radio>
</Radio-group>
<!-- (2) -->
<!-- 此时disabled相当于disabled=true;那么无法再修改此下拉的禁用状态,通过refs去修改也会报错;只能绑定相应的属性,如:`:disabled="subResultDisabled"` -->
<Select v-model="form.subResult" @on-change="subResultChange" disabled placeholder="请选择">
<Option v-for="(item, index) in subResult" :value="item.id" :key="index">{{ item.nodeName }}</Option>
</Select>可通过ref使用组件内部属性
- 获取组件名称
this.$refs.myRef.prefixCls
,如:ivu-select、ivu-date-picker、ivu-cascader - 如获取部分组件的展示值
Select
: this.$refs.myRef.publicValue(单选时。如果要在模板中展示则不能这样调用,会出现死循环,参考下文可编辑表单)DatePicker
: this.$refs.myRef.publicStringValueCascader
: this.$refs.myRef.displayRender(参考下文Cascader说明)
- 获取组件名称
Row
标签无法使用@click
事件,但是原生span
标签却可以
Select
- Select 搜索可搜索问题:检索数据项的多个属性时远程搜索无效 ^1
- Select 远程搜索问题:remote-method必须是顶级方法,否则数据无法刷新;iview远程搜索及其不好用,对于现实值和实际值一致的还可勉强使用,如果显示值和实际值不一样无法解决编辑界面回显问题(要么无法触发远程方法,要么触发多次)。建议替换为其他组件,如仅导入element-ui的远程搜索Element-UI
1 | <i-select |
- 手动触发click事件展示下拉选项
1 | this.$refs.mySelect.visible = true |
Checkbox
1 | <!-- label只在单独使用时有效;单独使用只能用value或v-model(且严格判断为true才勾选,为1不勾选) --> |
Table
- 去掉自带扩展行图标,换成按钮控制
1 | <template> |
Page 假分页
1 | <template> |
DatePicker
1 | <!-- (推荐) 返回的是string类型数据(配合on-change使用)。监控前台请求,此字段字符串如 2000-03-17" --> |
Cascader数据结构(含后台)
1 | <!-- 获取 Cascader 显示值,伪代码如下 --> |
- java代码
1 | // select *, id value, name label from d_project_module where project_id=#{projectId} and valid_status=1 // 将value和label单独取出 |
Drawer
1 | <!-- style="z-index:1500; position:fixed" 防止Drawer在多层弹框/Drawer显示时被遮盖 --> |
Progress
- percent必须不能使用子对象属性,否则无法代码增减进度
Modal
- 说明
- 通过
this.$Modal.confirm
提示,里面content支持html标签,换行可使用<br/>
- 通过
- 通过路由进入详细页面,保存完数据再回到主页面,之前查询条件丢失。此时可通过子路由+弹框完成,弹框包裹住子路由,回到主页面数据不会丢失
- 点击确定(on-ok事件)按钮不关闭弹框
1 | this.$refs.modal.visible = true |
- 全屏嵌套其他页面
1 | <template> |
Form
表单验证
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41<!-- 注意: model必须赋值,且FormItem必须定义prop,userDataForm: {}即可;影藏的字段也会校验 -->
<Form :model="userDataForm" :rules="userDataFormRule" ref="userDataForm">
<FormItem label="Login Name" prop="username">
<Input v-model="userDataForm.username" placeholder="Login Name"></Input>
</FormItem>
<!-- InputNumber验证时必须定义type,否则required一直报错
amount: [{ required: true, type:'number', message: "金额必填", trigger: "blur" }]
-->
<FormItem label="金额" prop="amount">
<InputNumber v-model="editForm.amount"></InputNumber>
<!-- **或者增加number属性** -->
<Input v-model="editForm.amount" number></Input>
</FormItem>
</Form>
<script>
let billCargoRules = {
seqNo: [{ required: true, type: 'number', message: '序号必填', trigger: 'blur' }],
piece: [
{ required: true, type: 'integer', message: '请输入大于零的整数', min: 0 }
],
weight: [
{ required: true, type: 'number', message: '请输入大于零的数字', min: 0 },
{
validator: function (rule, value, callback) {
if (/.*\..*/.test(value)) {
if (value.toString().split('.')[1].length > 3) {
// eslint-disable-next-line standard/no-callback-literal
callback('小数点最多三位')
} else {
callback()
}
} else {
callback()
}
}
}
],
}
</script>表单排版
1 | <!-- 一行排列多个元素使用Row-Col;如果使用Form的inline属性,则需要自定义宽度来美化 --> |
样式
主题
- 配置
1 | /* src/styles/index.less(最后在main.js中引入) */ |
1 | // 常用 |
通用标签属性
transfer
让元素置顶层显示,防止被其他元素遮挡(如果未遮挡慎用)- 使用空的
Col
完成排版<Col span="2"> </Col>
示例
可编辑表单
iview-admin
- iview-admin刷新浏览器地址跳转到首页,将
src/components/main/main.vue#mounted()
“设置了如果当前打开页面不在标签栏中,跳到homeName页”相关代码注释
参考文章