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 建站列表爲何這個樣式都須要放外面

相關文章
相關標籤/搜索