首頁 > 軟體

vue table直接定位到指定元素的操作程式碼

2022-11-25 14:00:43

vue+element中的表格,直接定位到指定的元素。

需求:點選某一個節點,彈窗,直接定位到點選的節點,高亮並顯示資料。

  <el-table ref="highTable" :data="treeData" highlight-current-row border default-expand-all row-key="'id" :tree-props="{children:'children',hasChildren:'hasChildren'}" :row-style="rowClassRender" :row-class-name="tableRowClassName">
            ...
        </el-table>

treeData是我的樹狀資料,表格樹。

default-expand-all:是否預設展開所有行,當 Table 包含展開行存在或者為樹形表格時有效;

row-style:行的 style 的回撥方法,也可以使用一個固定的 Object 為所有行設定一樣的 Style; //高亮顯示

row-class-name:行的 className 的回撥方法,也可以使用字串為所有行設定一個固定的 className。 //獲取index(我用的是樹狀資料,如果是列表資料就不需要)

rowClassRender({
                row
            }) {
                if (row.id === this.currentItemId) {
                    return {
                        'background-color': 'red'
                    }
                } else {
                    return ''
                }
            },
            tableRowClassName({
                row,
                index
            }) {
                //this.nodeItem是我最開始點選的節點
                if (row.id === this.nodeItem.id) {
                    this.currentIndex = index;
                }
            }

注意:一定要在獲取資料之後去賦值!!!不然scrollTop一直為0!!!!!

在獲取列表的程式碼塊中:

let divT = this.$refs.hightTable;
                this.$nextTick(()=>{
                    divT.scrollTop = 36 * this.currentIndex
                 })

vue中table表格做定位處理

需求:前端根據搜尋條件中的partNo的值,進行定位查詢到table列表中對應的每一行

search(){
  if(this.positionIndx.length==0){
    this.tableData.forEach((item,index)=>{
      if(item.partNo == this.queryForm.partNo){
        this.positionIndx.push(index)                        // 定義一個空陣列 positionIndx 用來儲存相同partNo的下標;
      }
    })
  }
  if (this.tableData.length > 0) {
    if (this.queryForm.partNo !== '') {
      if (this.$refs['selectPartRefs']) {
        let vmEl = this.$refs['selectPartRefs'].$el            // selectPartRefs 是table中繫結的ref的值,一定要保持一致;
        //計算卷軸的位置
        const targetTop = vmEl.querySelectorAll('.el-table__body tr')[this.positionIndx[this.inPosition]].getBoundingClientRect().top    // 找到table中的每一行利用下標來計算每一行dom元素的上部與瀏覽器的可視視窗的上面的高度距離;
        const containerTop = vmEl.querySelector('.el-table__body').getBoundingClientRect().top
        const scrollParent = vmEl.querySelector('.el-table__body-wrapper')
        scrollParent.scrollTop = targetTop - containerTop;
        this.inPosition++;                                     // 首先在data中定義 inPosition = 0 ,每次點選search按鈕的時候,讓下標進行++操作,以遍定位到下一個匹配的partNO;
        if( this.inPosition >= this.positionIndx.length ){
          this.inPosition = 0;                                 // 所有的都遍歷完成以後,讓定位回到第一個匹配的partNo的行上,以此達到可以迴圈定位的效果;
        }
      }
    } else {
      this.$message({
        type: 'error',
        message:'Please enter the partNo of the query'
      })
    }
  }
},
 

到此這篇關於vue table直接定位到指定元素的文章就介紹到這了,更多相關vue定位指定元素內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com