1. 程式人生 > >【API知識】ElementUI一些問題的解決方案

【API知識】ElementUI一些問題的解決方案

前言

  本人並不是前端開發人員,不過前端的介面和互動也沒少寫。以下整理一下我在使用elementUI過程中遇到的問題和對應的解決方案。

正文

1.表格欄位過長省略

  elmentUI的table-column有提供屬性 show-overflow-tooltip 只要在對應的欄位上設定為true,則文字超出部分就會用省略號替代,並且滑鼠移至其上時,可檢視完整資訊。

2.如何獲取行資料作為方法引數?

  如果要為表格的每一行都新增操作按鈕,如刪除。這些刪除按鈕繫結的是同一個方法,那麼如何區分是誰呼叫的呢,答案就是在方法中傳入引數,而這些引數就是在渲染的時候寫死在@click的方法引數裡面。獲取本行資料的方法就是scope.row.xxx,其中xxx就是本行資料的某一個屬性。如:@click="delete(scope.row.id)

3.<el-dropdown-item>如何繫結事件?

  發現<el-dropdown-item>指定@click是沒有響應的。官方的使用方法是,在command屬性指定操作命令,然後在<el-menu>裡面制定用於處理command的操作方法,例如@command="handleCommand",然後在裡面類似做switch的操作,即根據不同的值來進行對應的操作。還有就是command可以直接就是方法名,然後在handleCommand方法裡面,這樣呼叫:this[command]()。這樣就是直接呼叫methods方法集中的對應方法。

  但是,如果方法需要傳遞引數呢,用這種方法就不好做了。總不能再在這個command字串中去把方法名和引數分別解析出來吧,那太麻煩了。解決方法就是@click.native="func",這種方式可以直接呼叫methods方法集中的對應方法,傳參自然就沒問題了。

4.如何通過程式碼關閉message提示?

  一般我丟擲提示資訊,是直接this.$message。但是存在這樣的情境,即我完成了一個操作後,這個提示應該被立即關閉,而不是等它超時消失。答案就是,this.$message實際上會返回message物件的引用,那麼我們定義一個變數來存這個引用,然後在需要的使用呼叫close方法即可。如  messageHandle = this.$message(...)     messageHandle.close()

5.如何動態修改下拉框的可選項?

  有些時候,當前下拉框的選項取決於前一個下拉框的選中項,這時候就需要動態變動可選項。其中下來框的可選項<el-option>一般都是通過v-for渲染的。如<el-option v-for="item in items" ....>。那麼動態修改可選項的話,直接修改要遍歷的陣列就可以了,即修改items陣列的內容就可以了。另外如果當前下拉選項由上一個下來框的選中值決定,那麼上一個下來框就可以在@change方法裡面進行這個操作。

6.formatter的使用

  有些時候表格資料的展示,不能直接用從後臺獲取到的資料,需要進行一定的修改,或者說格式化。那麼這個時候,就需要用到formatter。formatter有三個引數,依次是row,column,cellValue。

  row是一行資料,可以通過這個引數獲取到其他列的資訊。

  column由於沒有相關的文件,不太瞭解,應該就是列的資訊。只知道column.property獲取到的就是這個列的key。

  cellValue是當前單元格根據key從row中獲取到的值。如果沒有任何處理,單元格顯示的就是這個值。注意了,有些時候,key對應的value可能不是值,而是物件。那這時候介面是無法直接列印物件的,介面顯示就會是undefined。例如Mongo文件的toJson字串返回的是這樣的:(_id和long型別的變數返回的不是直接的值)

  {

    “_id”:{"$oid":"嘰嘰歪歪"},

    "field1":"xxxx",

    "field2":{"$numberLong":"12345"},

    "field3":123

  }

  formatter方法是,針對列的。一列下來共用的是同一個方法。

7.表格不能顯示bool值的BUG

  這是elementUI的bug,單元格什麼都不顯示。官方說是不推薦直接顯示布林值,說是沒什麼意義。那麼只能格式化了,但是如果你不想轉換成什麼“YES/NO”,"通過/未通過”,而是直接列印ture/false的話。那就是把bool值轉成字串返回就可以了。就是利用前面的formatter。return String(cellValue);