element-ui一些注意點:


1.change ($event,“你要傳遞的其他值”),使用el-select組件時,想傳遞多個值。

或者 在el-option上的value屬性上傳遞對象 eg: 

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

2.value-key 是作為綁定對象的值時的必填項,作為唯一標志,el-select

3.循環遍歷多個el-select組件,選項選中,數據更新了,但是視圖不更新。

方法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里面定義了簡寫形式

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

所以@ == src ,也造成了@后面要加/ ,等價於  src/ 。

5.clearValidate()要用在before-close函數和取消按鈕函數里,其他地方不好使;Dom模板里不能用this,eg:$refs[‘form’].clearValidate();

解:Element-UI中的Dialog的內容是懶渲染的,即在第一次被打開之前,傳入的默認slot不會被渲染到DOM上,如果要操作DOM,需要在open事件回調中開發代碼。總結:直接閱讀組件底部的Attributes、Slot、Events相關說明。可以通過node_modules讀一下element-ui中Dialog組件的源碼,使用BEMCSS規范,props用法,各個Vue用法的規范使用。

6.Dom里面的form-item循環里validator校驗不能用this.xxx,用了會報錯;不是循環的validator校驗就可以用this.xxx,不會報錯;自定義校驗函數的回調函數callback(new Error('文案));和callback('文案'); 第二種回調用法在for循環方式中不生效。

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 建站列表為什么這個樣式都需要放外面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM