「本文已參與好文召集令活動,點擊查看後端、大前端雙賽道投稿,2萬元獎池等你挑戰!」javascript
記錄本身平常開發中遇到的問題及其解決辦法。css
緣由是觸發了表單默認的提交行爲,給el-form 加上@submit.native.prevent就好了。html
<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;
}
複製代碼
ElementUI 2.14.0 版本事件名稱改成 confirm 和 cancel,若是你的版本低於 2.14.0,記得使用onConfirm、onCancel。java
// 將confirm改成onConfirm
<el-popover @onConfirm="">
</el-popover>
複製代碼
看到項目裏有下面這麼一段代碼:node
<el-input v-model="form.retailMinOrder" placeholder="請輸入" onkeyup="value=value.replace(/[^\d.]/g,'')" />
複製代碼
這樣作雖然輸入框的顯示是正確的,但綁定的值是沒有更新的,將 onkeyup 改成 oninput 便可。web
<el-input v-model="form.retailMinOrder" placeholder="請輸入" @keyup.native="form.retailMinOrder=form.retailMinOrder.replace(/[^\d.]/g,'')" />
複製代碼
/* 設置全局 */
.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;
}
複製代碼
<el-input type="number" class="clear-number-input" />
複製代碼
在一些用戶註冊場景中,提交整個表單前有時候咱們會作一些單獨字段的校驗,例如發送手機驗證碼,發送時咱們只須要校驗手機號碼這個字段,能夠這樣作:element-ui
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">
<el-form-item label="部門" prop="dept"></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>
複製代碼
<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給個空格便可
<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>
複製代碼
<el-table>
<el-table-column label="名稱">
<template>
<el-input ref="inputRef" />
</template>
</el-table-column>
</el-table>
// 無效
this.$refs['inputRef'].focus()
this.$refs['inputRef'][0].focus()
this.$refs['inputRef'].$el.children[0].focus()
// 有效
<el-input id="inputRef" />
document.getElementById('inputRef').focus()
複製代碼
看到有小夥伴在代碼裏本身手動去添加CSS來實現,害,又是一個不看文檔的反面例子,其實只要加個show-overflow-tooltip就能夠了,還自帶tooltip效果,不香嗎?
<el-table-column label="客戶名稱" prop="customerName" show-overflow-tooltip>
</el-table-column>
複製代碼
<el-tree ref="tree"></el-tree>
expandTree(expand = true) {
const nodes = this.$refs['tree'].store._getAllNodes()
nodes.forEach(node => {
node.expanded = expand
})
}
複製代碼
事情原由:el-popover 裏的內容是動態獲取的,因此剛打開時位置正確,此時內容爲空,等到獲取數據渲染後 el-popover 內容盒子大小發生變化從而形成位置偏移。
解決辦法:經過源碼知道 el-popover 裏有個 updatePopper 方法用於更新位置(文檔裏沒有),因此咱們只需在獲取數據後從新 updatePopper 就能夠了。
<el-popover ref="popover" placement="left" trigger="click">
</el-popover>
複製代碼
// 獲取數據後
this.$nextTick(() => {
this.$refs['popover'].updatePopper()
})
複製代碼
destroy-on-close 設置爲 true 後發現彈窗關閉後 DOM 元素仍在,沒有被銷燬。
解決辦法:在 el-dialog 上添加 v-if。
<el-dialog :visible.sync="visible" v-if="visible" destroy-on-close>
</el-dialog>
複製代碼
級聯選擇器在設置爲可選任意一級時,選定某個選項時須要手動點擊空白處才能關閉。
解決辦法:可在 change 事件觸發時將其關閉。
<el-cascader ref="cascader" @change="onChange" />
複製代碼
onChange() {
this.$refs['cascader'].dropDownVisible = false
}
複製代碼
el-image 組件是自帶圖片預覽功能的,傳入 preview-src-list 便可。但有時候咱們不用 image 組件但又想預覽大圖怎麼辦?例如點擊一個按鈕時彈出一個圖片查看器?
答案是使用 el-image-viewer,文檔裏並無這個組件,但經過查看源碼知道,該組件正是 el-image 裏預覽圖片所用的。
<template>
<div> <el-button @click="open">打開圖片預覽</el-button> <el-image-viewer v-if="show" :on-close="onClose" :url-list="urls" :initial-index="initialIndex" /> </div>
</template>
<script> import ElImageViewer from 'element-ui/packages/image/src/image-viewer' export default { components: { ElImageViewer }, data() { return { show: false, urls: ['https://img0.baidu.com/it/u=391928341,1475664833&fm=26&fmt=auto&gp=0.jpg'], initialIndex: 0 } }, methods: { open() { this.show = true }, onClose() { this.show = false } } } </script>
複製代碼
未完待續,哪天遇到了什麼再更新。。。