element-ui一些注意点:

1.change ($event,“你要传递的其余值”),使用el-select组件时,想传递多个值。javascript

或者 在el-option上的value属性上传递对象 eg: css

:value="{'classId': ele.classId,'index': $keys,'sonIndex':$key}"

2.value-key 是做为绑定对象的值时的必填项,做为惟一标志,el-selecthtml

3.循环遍历多个el-select组件,选项选中,数据更新了,可是视图不更新。vue

方法a. this.tabData.examList = Object.assign({}, this.tabData.examList);//进行深拷贝 实现视图强更新
方法b. Vue.set(target,key,value); target能够是对象和数组,key能够是数字或字符串,value是要更改的具体数值
           eg:  Vue.set(this.tabData.examList,index,this.tabData.examList[index]); examList是数组包对象,index是数组的索引
                  当遇到Vue is not defind 错误时,在import Vue页面设置 window.Vue = Vue;即全局变量
参考连接:https://blog.csdn.net/yihanzhi/article/details/74200618
4.组件内引入文件,eg: 
import tools from '@/common/tools/index.js'

为何就能够找到src目录下的文件?由于在build/webpack.base.conf.js里面定义了简写形式java

alias: {
    'vue$': 'vue/dist/vue.esm.js',
    '@': resolve('src'),
}

因此@ == src ,也形成了@后面要加/ ,等价于  src/ 。node

5.clearValidate()要用在before-close函数和取消按钮函数里,其余地方很差使;Dom模板里不能用this,eg:$refs[‘form’].clearValidate();webpack

解:Element-UI中的Dialog的内容是懒渲染的,即在第一次被打开以前,传入的默认slot不会被渲染到DOM上,若是要操做DOM,须要在open事件回调中开发代码。总结:直接阅读组件底部的Attributes、Slot、Events相关说明。能够经过node_modules读一下element-ui中Dialog组件的源码,使用BEMCSS规范,props用法,各个Vue用法的规范使用。web

6.Dom里面的form-item循环里validator校验不能用this.xxx,用了会报错;不是循环的validator校验就能够用this.xxx,不会报错;自定义校验函数的回调函数callback(new Error('文案));和callback('文案'); 第二种回调用法在for循环方式中不生效。element-ui

7.菜单路由路径和Vue-router里面的配置是全匹配,有空格都不行。数组

8.Form的每一个item中的validator自定义校验逻辑只能有一个,若是是2个,就会promise的状态一直未padding,排查问题可用代码的删除排查法,删到最简单来排查。

9.多个表单校验,可用Promise.all[].then();很好用。

9.针对Vue响应不及时问题,setTimeOut是个很好的解决问题的办法。Event loop概念,可是有没有其余更好的办法呢?Object.assign(); Vue.$set(); 除此以外还有一个watch的巧用,数据变化就从新复制(解决jiaoshi工做台切换单元综合演练数据不更新问题)

10.webpack兼容问题,在Vue项目中,Vue文件的style中的type='text/css';script中的type='text/javascript',与webpack4版本不兼容,须要删除掉这样的写法。

11.Vue项目中DOM渲染结果会有 ‘data-v-xxx’字样,是由于Vue组件中使用了scoped,保证各组件间样式不互相影响,给每一个component都作了惟一的标记,每引入一个新组件都会多一个data-v-xxx字样。

12.Element-UI的表单提交中,若是加了自定义校验规则,最后必定要有return callback();否则表单执行不下去的。曾经找了半天错误,才找到这个缘由。

       checkLogId(rule, value, callback){// 校验LodId格式 以C开始,后面是数字
            let logId = this.ruleForm.logId;
            let headLetter = logId.slice(0,1);
            let otherLetter = logId.slice(1);
            let rules = /^\+?[1-9][0-9]*$/; // 正整数规则
            let re = new RegExp(rules);
            if( headLetter !== "C" ){
               return callback(new Error('打点ID格式添加错误'));
            }else if( !re.test(otherLetter) ){
               return callback(new Error('打点ID格式添加错误'));
            }
            return callback();
        },

 13. 模板列表使用flex布局,在最后一行,不足一行时,两端分布的解决:

        一行n个,在最后放n个写死的item,宽度和item保持同样,高度设置为0。

    延伸:是否有更优雅更好的实现方式呢~

 14. 列表中为何这个样式都须要放外面?

el-button--default > span

  解析:a. scoped利用CSS3属性选择器的原理来控制做用域,而Vue组件会给html元素标签添加data-*的属性。

  b. 在当前组件引入另外一子组件时,子组件生成的HTML元素并无被加上属性做用域;而编译后的CSS选择器加在了‘尾选择器’上,这样的误差致使了scoped内的样式对于子组件样式的覆盖重写失效。

  c. Scoped只对当前页面直接使用的标签样式有效

  d. 解决:另起一个不加scopedstyle标签,在里面用CSS选择器层级覆盖控制子组件样式。

      延伸:若是更优地解决这样的场景?CSS编译时如何在尾部加入属性选择器的?

15. 搜索中重置逻辑不可用?

this.$refs[formName].resetFields();

 

  解析:formName此处要和el-formrefmodel保持一致,并且每一个el-form-itemprop属性对应值于v-modal绑定值这样使用resetFields重置才会生效,效果是用data里面值覆盖了原来的值,潜台词就是data里面若是有默认值,此时item里面就是默认值而不是空值。

 

el-button--default > span 建站列表为何这个样式都须要放外面

相关文章
相关标签/搜索