ElementUI常遇到的一些問題

一、form 下面只有一個 input 時回車鍵刷新頁面

      原因是:觸發了表單默認的提交行為,給el-form 加上 @submit.native.prevent 就行了。

<el-form inline @submit.native.prevent>
  <el-form-item label="編號">
    <el-input
      v-model="query.orderNo"
      :placeholder="輸入編號"
      clearable
      @keyup.enter.native="enterInput"
    />
  </el-form-item>
</el-form>

 

二、表格固定列最後一行顯示不全

原因:這種情況下寬度剛好處於臨界值狀態時會出現。因為固定列是獨立於表格body動態計算高度的,當固定列高度小於表格高度時就會造成最後一行被遮擋。

解決問題如下:

// 設置全局
.el-table__fixed-right {
  height: 100% !important;
}

  

三、氣泡確認框文檔里的confirm事件不生效

       原因:版本:element-ui: “2.13.2”, vue: “2.6.10”

// 將confirm改為onConfirm
@onConfirm="onDeleteOrder(row.id)"

  

 四、輸入框用正則限制但綁定值未更新。

       看下面這麼一段程式碼:

<el-input 
  v-model="form.num" 
  placeholder="請輸入"
  onkeyup="value=value.replace(/[^\d.]/g,'')" 
/>

     這樣做雖然輸入框的顯示是正確的,但綁定的值是沒有更新的,將 onkeyup 改為 oninput 即可。由於輸入中文後 v-model 會失效,然後進一步改進

<el-input 
  v-model="form.num" 
  placeholder="請輸入" 
  @keyup.native="form.num=form.num.replace(/[^\d.]/g,'')"
/>

  

五、去除type=”number”輸入框聚焦時的上下箭頭。

<el-input type="number" class="clear-number-input" />
/* 設置全局 */
.clear-number-input.el-input::-webkit-outer-spin-button,
.clear-number-input.el-input::-webkit-inner-spin-button {
  margin: 0;
  -webkit-appearance: none !important;
} 
.clear-number-input.el-input input[type="number"]::-webkit-outer-spin-button,
.clear-number-input.el-input input[type="number"]::-webkit-inner-spin-button {
  margin: 0;
  -webkit-appearance: none !important;
}
.clear-number-input.el-input {
  -moz-appearance: textfield;
} 
.clear-number-input.el-input input[type="number"] {
  -moz-appearance: textfield;
}

  

六、只校驗表單其中一個欄位

     在一些場景中,提交整個表單時我們會做一些單獨欄位的校驗,例如發送手機驗證碼,發送時我們只需要校驗手機號碼這個欄位,可以這樣做:

this.$refs['form'].validateField('mobile', valid => {
  if (valid) {
    // 發送驗證碼
  }
})

  如果需要多個參數,將參數改為數組形式即可。

七、彈窗重新打開時表單上次的校驗資訊未清除。

原因: 有時會在open時在$nextTick里重置表單,而我選擇在關閉時進行重置。

<el-dialog @close="onClose">
  <el-form ref="form">
  </el-form>
</el-dialog>

// 彈窗關閉時重置表單
onClose() {
  this.$refs['form'].resetFields()
}

  

八、表頭與內容錯位

 

// 全局設置
.el-table--scrollable-y .el-table__body-wrapper {
 overflow-y: overlay !important;
}

  

九、表單多級數據結構校驗問題

<el-form :model="form" :rules="rules">
  <el-form-item label="公司" prop="company"></el-form-item>
<el-form-item label="姓名" prop="user.name"></el-form-item> </el-form>

  校驗

rules: {
  'user.name': [{ required: true, message: '姓名不能為空', trigger: 'blur' }]
}

  

十、表格跨分頁多選。

   加上row-key和reserve-selection即可。

<el-table row-key="id">
  <el-table-column type="selection" reserve-selection></el-table-column>
</el-table>

 

十一、根據條件高亮行並去除默認hover顏色

 

<el-table :row-class-name="tableRowClassName">
</el-table>

tableRowClassName({ row }) {
  return row.status === 2 ? 'highlight' : ''
}

// 設置全局
.el-table .highlight {
  background-color: #b6e8fe;
  &:hover > td {
    background-color: initial !important;
  }
  td {
    background-color: initial !important;
  }
}

  

十二、表單不想顯示label但又想顯示必填星號怎麼辦加個空格即可。

 

// label給個空格即可
<el-form>
  <el-table>
    <el-table-column label="編號">
      <template>
        <el-form-item label=" ">
           <el-input placeholder="編號不能為空" />
</el-form-item> </template> </el-table-column> </el-table> </el-form>

 

  

十三、table 內嵌 input 調用 focus 方法無效。

 

<el-table>
  <el-table-column label="名稱">
    <template>
      <el-input ref="refInput" />
    </template>
  </el-table-column>
</el-table>

// 無效
this.$refs['refInput'].focus()
this.$refs['refInput'][0].focus()
this.$refs['refInput'].$el.children[0].focus()
// 有效 <el-input id="refInput" />
document.getElementById('refInput').focus()

十四、表格內容超出省略。

   每行加上  show-overflow-tooltip即可超出範圍的氣泡。

 

<el-table-column label="客戶名稱" prop="customerName" show-overflow-tooltip>
</el-table-column>

 

  

十五、el-tree 展開/收起所有節點

<el-tree ref="treeList"></el-tree>

expandTree(expand = true) {
  const nodes = this.$refs['treeList'].store._getAllNodes()
nodes.forEach(node => { node.expanded = expand }) }

  

待更新。。。。。。。。。。。。。。。。。。。。。。。