【Element UI】使用问题记录

转载:https://www.cnblogs.com/yangchongxing/p/10750994.html

下载地址:

https://unpkg.com/browse/element-ui@2.11.1/

https://unpkg.com/element-ui@2.11.1/lib/index.js

https://unpkg.com/element-ui@2.11.1/lib/theme-chalk/index.css

=============================================================

1、el-cascader 级联选择器

2、重置 form 表单字段的值 或 清除验证结果

3、form 表单的校验

4、强制组件渲染

5、设置光标 focus

6、校验及规则

7、元素默认border-color

8、自定义input样式

9、from表单数组对象元素的校验

10、视频 video 自动适应 el-col 宽度

11、el-table 操作

12、el-tree 操作

13、谷歌浏览器 input 自动填充颜色改变或透明

14、可输入可选择级联器组件

15、展开el-tree指定的结点

16、日期、时间、日期时间控件

17、表格树 el-table-tree-column 问题

18、el-dialog弹出框的body设置高度

=============================================================

1、el-cascader 级联选择器

a. 显示无法清空

  1. <el-cascader
  2. ref="mycascader"
  3. :options="dataArray"
  4. v-model="selectData"
  5. :show-all-levels="false" expand-trigger="click"
  6. clearable
  7. change-on-select>
  8. </el-cascader>

定义一个 ref ,使用 clearValue 方法清空

  1. let obj = {};
  2. obj.stopPropagation = () =>{};
  3. this.$refs.mycascader.clearValue(obj);

clearValue 源码如下,此处clearValue需要传入一个事件对象 这里是自己模拟一个事件对象来避免报错

  1. clearValue: function clearValue(ev) {
  2. ev.stopPropagation();
  3. this.handlePick([], true);
  4. }

b. 每一层都选择

追加 change-on-select 属性,去掉则只能选择叶子结点

c. 选中指定的值

  1. let position = [];
  2. position.push(value);
  3. this.$refs.mycascader.handlePick(position);

d. 显示和隐藏菜单

  1. this.$refs.mycascader.showMenu();
  2. this.$refs.mycascader.hideMenu();

e. 实现可输入可选择

  1. <template>
  2. <el-cascader filterable ref="cstmInputDepartmentDascader" :options="departmentCascader" v-model="departmentValue"
  3. :props="{ checkStrictly: true }"
  4. :show-all-levels="showAllLevels"
  5. :size="showSize"
  6. :debounce="500" style="width: 100%"
  7. :before-filter="beforeFilterDepartment"
  8. @blur="blurDepartment"
  9. @focus="focusDepartment"
  10. @change="changeDepartment"
  11. @visible-change="visibleChange"
  12. :placeholder="showPlaceholder" clearable
  13. ></el-cascader>
  14. </template>
  15.  
  16. <script>
  17. import {deepClone} from '@/util/util';
  18. import {getCascaderAttach} from '@/api/admin/department';
  19.  
  20. export default {
  21. name: "input-department-cascader",
  22. props: {
  23. value: {},
  24. showAllLevels: {
  25. type: Boolean,
  26. default: false
  27. },
  28. showSize: {
  29. type: String,
  30. default: 'medium'
  31. },
  32. showPlaceholder: {
  33. type: String,
  34. default: ''
  35. }
  36. },
  37. data() {
  38. return {
  39. departmentList: [],
  40. departmentCascader: [],
  41. departmentCascaderBack: [],
  42. departmentCascaderLength: undefined,
  43. departmentValue:[],
  44. inputDepartmentName: undefined,
  45. increment: 1
  46. }
  47. },
  48. created() {
  49. this.getDepartmentCascader();
  50. },
  51. mounted() {
  52. this.init();
  53. },
  54. methods: {
  55. getDepartmentCascader() {
  56. getCascaderAttach().then(response => {
  57. // 部门列表数据 id,parentId,treePosition, 根节点parentId是0,treePosition没有
  58. this.departmentList = response.data.attachData;
  59. // 部门级联数据 label,value,children,disabled
  60. this.departmentCascader = response.data.cascaderData;
  61. this.departmentCascaderLength = this.departmentCascader.length;
  62. // 部门级联数据备份
  63. this.departmentCascaderBack = deepClone(this.departmentCascader);
  64. this.init();
  65. })
  66. },
  67. init() {
  68. if (!this.value) return;
  69. let value = [];
  70. let list = deepClone(this.departmentCascaderBack);
  71. let department = this.getDepartmentById(this.value);
  72. // 没有找到就认为是输入的数据
  73. if (!department) {
  74. list.push(this.getItem(this.value));
  75. value.push(this.value);
  76. } else {
  77. if (department.treePosition) {
  78. value = department.treePosition.substr(1).split('&');
  79. }
  80. value.push(this.value);
  81. }
  82. this.departmentCascader = list;
  83. this.departmentValue = value;
  84. },
  85. getDepartmentById(id) {
  86. let department = undefined;
  87. if (this.departmentList && id) {
  88. for (let item of this.departmentList) {
  89. if (id === item.id) {
  90. department = deepClone(item);
  91. break;
  92. }
  93. }
  94. }
  95. return department;
  96. },
  97. getItem(name) {
  98. return {
  99. value: name,
  100. label: name,
  101. children: undefined,
  102. disabled: false
  103. }
  104. },
  105. beforeFilterDepartment: function(value) {
  106. this.inputDepartmentName = value;
  107. return false;
  108. },
  109. blurDepartment() {
  110. if (!this.inputDepartmentName) return;
  111. this.inputDepartmentName = this.inputDepartmentName.trim();
  112. if (this.inputDepartmentName === "") return;
  113. this.$set(this.departmentCascader, this.departmentCascaderLength, this.getItem(this.inputDepartmentName));
  114. this.departmentValue = [this.inputDepartmentName];
  115. this.inputDepartmentName = undefined;
  116. this.changeDepartment(this.departmentValue);
  117. },
  118. focusDepartment() {
  119. this.$refs.cstmInputDepartmentDascader.$refs.input.$refs.input.select();
  120. },
  121. changeDepartment(v) {
  122. if (v && v.length > 0) {
  123. this.$emit('input', v[v.length - 1]);
  124. } else {
  125. this.$emit('input', '');
  126. }
  127. },
  128. visibleChange(flag) {
  129. if (flag) return;
  130. if (this.departmentValue && this.departmentValue.length > 0) {
  131. let departmentId = this.departmentValue[this.departmentValue.length - 1];
  132. let departmentName = '';
  133. let department = this.getDepartmentById(departmentId);
  134. if (department) {
  135. departmentName = department.name;
  136. } else {
  137. departmentName = departmentId;
  138. }
  139. this.$emit('departmentChange', departmentId, departmentName);
  140. } else {
  141. this.$emit('departmentChange', '', '');
  142. }
  143.  
  144. },
  145. setDepartmentValue(v) {
  146. this.departmentValue = v;
  147. }
  148. }
  149. }
  150. </script>
  151.  
  152. <style scoped>
  153.  
  154. </style>

filterable 开启过滤,也就是变成可输入

before-filter 筛选之前的钩子,参数为输入的值,若返回 false 或者返回 Promise 且被 reject,则停止筛选

blur 失去焦点

f、获取当前的 label

  1. <el-cascader ref="myCascader" :options="myList" v-model="myPosition" @change="myChange" size="small"></el-cascader>
  2.  
  3. getMyList(){
  4. this.myList = [];
  5. // 查询结果
  6. getMyListFromDB().then(response => {
  7. this.myList = response.data;
  8. if(this.myList.length > 0){
  9. let v = [];
  10. this.getDefault(v, this.myList);//取出默认第一个的数组
  11. this.myPosition = v;//选中第一个
  12. if (v.length > 0) {
  13. let selectValue = v[v.length - 1];
  14. let selectLabel = this.currentLabels(v);
  15. }
  16. }
  17. })
  18. },
  19. getDefault(result, list) {
  20. if (list) {
  21. result.push(list[0].value);
  22. this.getDefault(result, list[0].children);
  23. }
  24. },
  25. currentLabels(v) {
  26. let options = this.myList;
  27. let labels = [];
  28. v.forEach(value => {
  29. const targetOption = options && options.filter(option => option['value'] === value)[0];
  30. if (targetOption) {
  31. labels.push(targetOption['label']);
  32. options = targetOption['children'];
  33. }
  34. });
  35. // 拼接标签数组
  36. let label = this.$refs.myCascader.showAllLevels ? labels.join('/') : labels[labels.length - 1];
  37. return label;
  38. },
  39. myChange(v){
  40. if (v.length > 0) {
  41. let selectValue = v[v.length - 1];
  42. let selectLabel = this.currentLabels(v);
  43. }
  44. }

g、选中可输入级联中的所有值

  1. this.$refs.mycascader.$refs.input.$refs.input.select();

2、重置 form 表单字段的值 或 清除验证结果

validate

对整个表单进行校验的方法,参数为一个回调函数。该回调函数会在校验结束后被调用,并传入两个参数:是否校验成功和未通过校验的字段。若不传入回调函数,则会返回一个 promise

Function(callback: Function(boolean, object))

例:this.$refs['myForm'].validate((valid, obj) => {});

validateField

对部分表单字段进行校验的方法

Function(props: array | string, callback: Function(errorMessage: string))

例:this.$refs['myForm'].validateField('myField', errorMsg => {});

resetFields

对整个表单进行重置,将所有字段值重置为初始值并移除校验结果

例:this.$refs['myForm'].resetFields();

clearValidate

移除表单项的校验结果。传入待移除的表单项的 prop 属性或者 prop 组成的数组,如不传则移除整个表单的校验结果

Function(props: array | string)

例:

this.$refs['myForm'].clearValidate();
this.$refs['myForm'].clearValidate(["myField1","myField2"]);

3、form 表单的校验

表单定义 ref="myForm"

Form Methods 表单方法

validate  对整个表单进行校验的方法,参数为一个回调函数。该回调函数会在校验结束后被调用,并传入两个参数:是否校验成功和未通过校验的字段。若不传入回调函数,则会返回一个 promise Function(callback: Function(boolean, object))

validateField  对部分表单字段进行校验的方法 Function(props: array)

清除表单值和校验信息
this.$refs['myForm'].resetFields();

  1.  

清除表单校验信息
this.$refs['myForm'].clearValidate();

  1.  

校验单校
this.$refs['myForm'].validate(valid => {
  if(valid) {
    // 检验成功,没有问题
  } else {
    // 校验失败,有错误
  }
});

  1.  

校验字段
this.$refs['myForm'].validateField('name', errorMsg => {
  if (!errorMsg) {
  } else {
    callback(new Error("请输入姓名"));
  }
});

跟规则校验,nameEnable == 0时不校验,其他时候校验

  1. const checkName = (rule, value, callback) => {
  2. if (/^[\u4e00-\u9fa5]{2,4}$/.test(value)) {
  3. callback();
  4. } else {
  5. callback(new Error('请输入汉字'));
  6. }
  7. };
  8. settingRules: {
  9. name: [
  10. {required: true, message: '请输入姓名'},
  11. {validator: checkName, trigger: ['blur','change']}
  12. ],
  13. }
  14. <el-form-item label="姓名" prop="name" ref="nameField" :rules="nameEnable == 0 ? [] : userRules.name">
  15. <el-input v-model="user.name" maxlength="4"></el-input>
  16. </el-form-item>

4、强制组件渲染

  1. this.$forceUpdate();

5、设置光标 focus

在vue中并不是每次数据改变都会触发更新dom,而是将这些操作都缓存在一个队列,在一个事件循环结束之后,刷新队列,统一执行dom更新操作。 而如果想在DOM状态更新后做点什么,则需要用到nextTick。在vue生命周期的created()钩子函数进行的DOM操作要放在Vue.nextTick()的回调函数中,因为created()钩子函数执行的时候DOM并未进行任何渲染,而此时进行DOM操作是徒劳的,所以此处一定要将DOM操作的JS代码放进Vue.nextTick()的回调函数中。

通过下面的方式设置光标

  1. this.$nextTick(() => {
  2. this.$refs['viewFocus'].focus();
  3. });

6、校验

  1. userRules: {
  2. name: [
  3. {required: true, message: '请输入名称'}
  4. {validator: checkName, trigger: ['blur','change']}
  5. ]
  6. }
  7. const checkName = (rule, value, callback) => {
  8. isNameExist(name: name}).then(response => {
  9. if (response.status == 200 && response.data) {
  10. callback(new Error(response.message));
  11. return;
  12. }
  13. });
  14. callback();
  15. };

全局匹配非数字,/[^\d]/g.test(value) true说明有非数字需要提示错误,false说明都是数字验证通过

7、元素默认border-color

正常:border-color: #dcdfe6;

焦点:border-color: #409EFF;

出错:border-color: #f56c6c;

8、自定义input样式

  1. input::-webkit-input-placeholder {
  2. color: #C0C4CC;
  3. font-size: 14px;
  4. }
  5. input:-moz-placeholder {
  6. color: #C0C4CC;
  7. font-size: 14px;
  8. }
  9. input:-ms-input-placeholder {
  10. color: #C0C4CC;
  11. font-size: 14px;
  12. }
  13.  
  14. .imageNameInput {
  15. margin-top: 2px;
  16. -webkit-appearance: none;
  17. background-color: #fff;
  18. background-image: none;
  19. border-radius: 4px;
  20. border: 1px solid #dcdfe6;
  21. -webkit-box-sizing: border-box;
  22. box-sizing: border-box;
  23. color: #606266;
  24. display: inline-block;
  25. color: #303133;
  26. font-size: 14px;
  27. height: 40px;
  28. line-height: 40px;
  29. outline:;
  30. padding: 0 15px;
  31. -webkit-transition: border-color .2s cubic-bezier(.645,.045,.355,1);
  32. transition: border-color .2s cubic-bezier(.645,.045,.355,1);
  33. width: 160px;
  34. }
  35. .imageNameInput input[type=text]:focus{
  36. outline: 1px solid #409EFF;
  37. }

9、from表单数组对象元素的校验

直接给prop绑定为数组下的名称

参考文章:https://www.cnblogs.com/beileixinqing/p/10969828.html

  1. model: {
  2. images: undefined,
  3. imageArray: []
  4. }
  5.  
  6. imageArray的属性{name: undefined, url: undefined, del: false}
  7.  
  8. <el-form-item label="图片" prop="images">
  9. <el-input v-model="model.images"></el-input>
  10.  
  11. <div v-for="(o,i) in model.imageArray" class="image-uploader">
  12. <el-form-item :prop="`imageArray[${i}].name`" :rules="{ required: true, message: '图片名称', trigger: 'blur' }">
  13. <img :src="o.url" class="image-add">
  14. <el-input v-model="o.name" maxlength="20"></el-input>
  15. </el-form-item>
  16. </div>
  17. </el-form-item>

10、视频 video 自动适应 el-col 宽度

给视频指定样式即可

参考文档:https://blog.csdn.net/wuqingyou_w/article/details/51671356

  1. video {
  2. width: 100%;
  3. height: 100%;
  4. object-fit:fill;
  5. }

11、el-table 操作

选中行

给 el-table 定义 ref="menuTable" :data="menuList"

  1. this.$refs.menuTable.toggleRowSelection(this.menuList[0]);

列内容过长隐藏

  1. el-table-column show-overflow-tooltip 当内容过长被隐藏时显示 true/false
  2. 例::show-overflow-tooltip="true"
  3. el-table tooltip-effect 控制颜色 dark/light
  4. 例:tooltip-effect="light"

12、el-tree 操作

a.设置树选中行的颜色

  1. .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
  2. background-color: #a6d1ff;
  3. }

b.选中树结点

  1. // 通过 key 设置某个节点的当前选中状态,使用此方法必须设置 node-key 属性
  2. // (key) 待被选节点的 key,若为 null 则取消当前高亮的节点
  3. this.$refs.myTree.setCurrentKey(myKey);
  4.  
  5. // 通过 node 设置某个节点的当前选中状态,使用此方法必须设置 node-key 属性
  6. this.$refs.myTree.setCurrentNode(myNode);

选中单个

  1. this.$refs['catalogTree'].setChecked(catalogId, true, false);

清空选中

  1. this.$refs['catalogTree'].setCheckedKeys([])

13、谷歌浏览器 input 自动填充颜色改变或透明

设置黄色背景变成白色背景

  1. input:-webkit-autofill {
  2. box-shadow: 0 0 0px 1000px white inset !important;
  3. }
  4. input:-webkit-autofill:focus {
  5. box-shadow: 0 0 0px 1000px white inset !important;
  6. }

设置透明:

  1. input:-internal-autofill-previewed,
  2. input:-internal-autofill-selected {
  3. -webkit-text-fill-color: #FFFFFF !important;
  4. transition: background-color 5000s ease-in-out 0s !important;
  5. }

不要混合用、亲测有效

14、可输入可选择级联器组件

  1. <template>
  2. <el-cascader filterable ref="cstmInputDepartmentDascader" :options="departmentCascader" v-model="departmentValue"
  3. :props="{ checkStrictly: true }"
  4. :show-all-levels="showAllLevels"
  5. :debounce="500" style="width: 100%"
  6. :before-filter="beforeFilterDepartment"
  7. @blur="blurDepartment"
  8. @focus="focusDepartment"
  9. @change="changeDepartment"
  10. ></el-cascader>
  11. </template>
  12.  
  13. <script>
  14. import {deepClone} from '@/util/util';
  15. import {getCascaderAttach} from '@/api/admin/department';
  16.  
  17. export default {
  18. name: "input-department-cascader",
  19. props: {
  20. value: {},
  21. showAllLevels: {
  22. type: Boolean,
  23. default: false
  24. }
  25. },
  26. data() {
  27. return {
  28. departmentList: [],
  29. departmentCascader: [],
  30. departmentCascaderBack: [],
  31. departmentCascaderLength: undefined,
  32. departmentValue:[],
  33. inputDepartmentName: undefined,
  34. increment: 1
  35. }
  36. },
  37. created() {
  38. this.getDepartmentCascader();
  39. },
  40. mounted() {
  41. this.init();
  42. },
  43. methods: {
  44. getDepartmentCascader() {
  45. getCascaderAttach().then(response => {
  46. // 部门列表数据 id,parentId,treePosition, 根节点parentId是0,treePosition没有
  47. this.departmentList = response.data.attachData;
  48. // 部门级联数据 label,value,children,disabled
  49. this.departmentCascader = response.data.cascaderData;
  50. this.departmentCascaderLength = this.departmentCascader.length;
  51. // 部门级联数据备份
  52. this.departmentCascaderBack = deepClone(this.departmentCascader);
  53. this.init();
  54. })
  55. },
  56. init() {
  57. if (!this.value) return;
  58. let value = [];
  59. let list = deepClone(this.departmentCascaderBack);
  60. let department = this.getDepartmentById(this.value);
  61. // 没有找到就认为是输入的数据
  62. if (!department) {
  63. list.push(this.getItem(this.value));
  64. value.push(this.value);
  65. } else {
  66. if (department.treePosition) {
  67. value = department.treePosition.substr(1).split('&');
  68. }
  69. value.push(this.value);
  70. }
  71. this.departmentCascader = list;
  72. this.departmentValue = value;
  73. },
  74. getDepartmentById(id) {
  75. let department = undefined;
  76. if (this.departmentList && id) {
  77. for (let item of this.departmentList) {
  78. if (id === item.id) {
  79. department = deepClone(item);
  80. break;
  81. }
  82. }
  83. }
  84. return department;
  85. },
  86. getItem(name) {
  87. return {
  88. value: name,
  89. label: name,
  90. children: undefined,
  91. disabled: false
  92. }
  93. },
  94. beforeFilterDepartment: function(value) {
  95. this.inputDepartmentName = value;
  96. return false;
  97. },
  98. blurDepartment() {
  99. if (!this.inputDepartmentName) return;
  100. this.$set(this.departmentCascader, this.departmentCascaderLength, this.getItem(this.inputDepartmentName));
  101. this.departmentValue = [this.inputDepartmentName];
  102. this.inputDepartmentName = undefined;
  103. this.changeDepartment(this.departmentValue);
  104. },
  105. focusDepartment() {
  106. this.$refs.cstmInputDepartmentDascader.$refs.input.$refs.input.select();
  107. },
  108. changeDepartment(v) {
  109. if (v && v.length > 0) {
  110. this.$emit('input', v[v.length - 1]);
  111. } else {
  112. this.$emit('input', '');
  113. }
  114. }
  115. }
  116. }
  117. </script>
  118.  
  119. <style scoped>
  120.  
  121. </style>

15、展开el-tree指定的结点

  1. this.$refs['catalogTree'].store.currentNode.expanded = true
  2. this.$refs['catalogTree'].store.nodesMap["id"].expanded = true

16、日期、时间、时间戳控件

  1. <!-- 日期 -->
  2. <el-date-picker v-model.trim="mydate"
  3. value-format="yyyy-MM-dd"
  4. format="yyyy-MM-dd"
  5. type="date"
  6. placeholder="请选择日期"></el-date-picker>
  7.  
  8. <!-- 时间 -->
  9. <el-time-picker v-model.trim="mytime"
  10. value-format="HH:mm:ss"
  11. format="HH:mm:ss"
  12. placeholder="请选择时间"></el-time-picker>
  13.  
  14. <!-- 时间戳 -->
  15. <el-date-picker v-model.trim="mydatetime"
  16. value-format="yyyy-MM-dd HH:mm:ss"
  17. format="yyyy-MM-dd HH:mm:ss"
  18. type="datetime"
  19. placeholder="请选择时间戳"></el-date-picker>

value-format 控制值的格式,format 控制显示的格式,这两个可以不同,根据具体情况选择控制

17、表格树 el-table-tree-column 问题

  1. <el-table-tree-column
  2. fixed 是否固定
  3. :expand-all="false" 是否展开
  4. :indent-size="20" 子层相对于父层的缩进px
  5. child-key="children" 子层级数据(数组形式)
  6. levelKey="level" 层级1,2,3代表第几层
  7. treeKey="value" 当前层级的ID, 子层级的parentKey与父层级treeKey一致
  8. parentKey="parentId" 父层级的ID, 与父层级treeKey一致
  9. prop="label" 显示的属性
  10. label="名称" 表头文字
  11. >

注意:treeKey可以不指定,默认使用对象的ID属性,若没有ID属性则需要使用treeKey明确指定属性,否则会出现各个层级被同时操作的问题(都展开或关闭)。levelKey在没有时子层和父层之间没有缩进。

18、el-dialog弹出框的body设置高度

问题代码

  1. <el-dialog ref="taskDialog" title="标题" :fullscreen="true"
  2. :visible.sync="dialogTaskVisible"
  3. :close-on-click-modal="closeOnClickModal"
  4. @close="closeTaskDialog">
  5. <iframe ref="taskIframe" :style="{height: iframeHeight}"
  6. :src="this.currentTask.url"
  7. class="iframe" @load="iframeLoad"></iframe>
  8. <div slot="footer" class="dialog-footer">
  9. <el-button @click="closeTaskDialog">取消</el-button>
  10. </div>
  11. </el-dialog>

iframe 的 style 设置 height:100% 没有撑开 el-dialog__body 部分

解决方式是给 iframe 动态设置具体的高

定义 iframeHeight,给 el-dialog 定义 ref="taskDialog", 绑定 @load="iframeLoad" 加载完成事件,在事件方法中计算高度并设置,

监听窗口大小变化,在事件方法中计算高度并设置

  1. data() {
  2. return {
  3. screenWidth: document.documentElement.clientWidth,
  4. screenHeight: document.documentElement.clientHeight,
  5. iframeHeight: '100%'
  6. };
  7. },
  8. watch:{
  9. 'screenWidth':function(val){ //监听屏幕宽度变化
  10. },
  11. 'screenHeight':function(val){ //监听屏幕高度变化
  12. this.iframeLoad();
  13. }
  14. },
  15. mounted() {
  16. var _this = this;
  17. window.onresize = function(){ // 定义窗口大小变更通知事件
  18. _this.screenWidth = document.documentElement.clientWidth; //窗口宽度
  19. _this.screenHeight = document.documentElement.clientHeight; //窗口高度
  20. };
  21. },
  22. methods: {
  23. iframeLoad() {
  24. this.$nextTick(()=>{
  25. this.iframeHeight = this.$refs['taskDialog'].$el.offsetHeight - 130 + 'px'; // 用 dialog 总高减去 头部和底部的高,总宽 offsetWidth
  26. })
  27. },
  28. }

-

【Element UI】使用问题记录的更多相关文章

  1. 表单编辑时el-form的validate方法执行无效,阻塞代码运行 - Element UI踩坑记录

    今天在用element-ui写管理后台需求时,遇到一个奇怪的问题 一个正常带校验的表单,在新增列表数据时表单校验功能正常: 但是在新增之后再去编辑数据时,表单校验却失效了,甚至阻塞了后续的代码执行,控 ...

  2. element ui 1.4 升级到 2.0.11

    公司的框架 选取的是 花裤衩大神开源的 基于 element ui + Vue 的后台管理项目, 项目源码就不公开了,记录 分享下 步骤 1. 卸载 element ui 1.4的依赖包 2. 卸载完 ...

  3. element UI Cascader 级联选择器 编辑 修改 数组 路径 问题(转载)

    来源:https://segmentfault.com/a/1190000014827485 element UI的Cascader级联选择器编辑时 vue.js element-ui 2 eleme ...

  4. vue + element ui 实现实现动态渲染表格

    前言:之前需要做一个页面,能够通过表名动态渲染出不同的表格,这里记录一下.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9786326.html 网站地址:我的 ...

  5. vue+element ui 的tab 动态增减,切换时提示用户是否切换

    前言:工作中用到 vue+element ui 的前端框架,动态添加 Tab,删除 Tab,切换 Tab 时提示用户是否切换等,发现 element ui  有一个 bug,这里记录一下如何实现.转载 ...

  6. element ui 时间控件 多个日期

    前言:工作中用到 vue+element ui 的前端框架,需要使用时间控件来选择多个日期,已月日的形式,且有默认值,所以记录一下.转载请注明出处:https://www.cnblogs.com/yu ...

  7. 基于 vue+element ui 的cdn网站(多页面,都是各种demo)

    前言:这个网站持续更新中...,有网上预览,github上也有源码,喜欢记得star哦,欢迎留言讨论. 网站地址:我的个人vue+element ui demo网站 github地址:yuleGH g ...

  8. vue+element ui 的时间控件选择 年月日时分

    前言:工作中用到 vue+element ui 的前端框架,需要选择年月日时分,但element ui官网demo有没有,所以记录一下.转载请注明出处:https://www.cnblogs.com/ ...

  9. vue+element UI + axios封装文件上传及进度条组件

    1.前言 之前在做项目的时候,需要实现一个文件上传组件并且需要有文件上传进度条,现将之前的实现过程简单记录一下,希望可以帮助到有需要的人. 项目用的是Vue框架,UI库使用的是element UI,前 ...

随机推荐

  1. python:模块0

    一.模块是更高级的封装: 容器:数据的封装 函数:语句的封装 类   :方法和属性的封装 模块:模块就是程序,即每个.py文件 二.引入 import 模块名 from 模块名 import xx(函 ...

  2. C#读写XML的两种一般方式

    针对XML文档的应用编程接口中,一般有两种模型:W3C制定的DOM(Document Object Method,文档对象模型)和流模型. 流模型的两种变体:"推"模型(XML的简 ...

  3. 关闭Eslint检查

    Eslint是一个JavaScript的校验插件,通常用来校验语法或代码的书写风格.不过有点过于严格,通常缩减不同也会报错... 这会影响工作效率啊,最好就是在创建项目的时候不要ESlint(选择No ...

  4. 如何通过swoole加速laravel的问题?

    这篇文章主要介绍了关于如何使用swoole加速laravel,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 再来复习一下吧,导致 php 慢的各种因素中解析性语言的特性可以说是罪魁祸首 ...

  5. DBEntry.Net 简介

    [尊重作者:本文转自:http://www.cnblogs.com/lephone/]   这是我设计的一个轻量级的 .Net ORM (Object Relational Mapping) 数据访问 ...

  6. 原生JS的移入溢出控制div的显示与隐藏

    原生JS的移入溢出控制div的显示与隐藏的写法 上面的写法火狐存在兼容性

  7. Fragment源码分析

    转载请标明出处:http://blog.csdn.net/shensky711/article/details/53171248 本文出自: [HansChen的博客] 概述 Fragment表示 A ...

  8. 【RN - 基础】之React Native组件的生命周期

    下图描述了React Native中组件的生命周期: 从上图中可以看到,React Native组件的生命周期可以分为初始化阶段.存在阶段和销毁阶段. 实例化阶段 实例化阶段是React Native ...

  9. php 精度计算问题

    PHP var_dump(intval(0.58 * 100)); 正确结果是 57,而不是 58 浮点运算惹的祸 其实这些结果都并非语言的 bug,但和语言的实现原理有关, js 所有数字统一为 N ...

  10. php 图片指定留白叠加缩放

    遇到这样一个需求:原图大小不一,而且留白也大小不一,需要将原图切出来一个核心图,然后将图片左右留白,组成一个其他尺寸的图片.换句话说,原图在新图片中的位置是可以控制的. 这里思路是:先创建一个规定大小 ...