element-ui 組件常見錯誤 confirm, 分頁的切換頁碼改變,表格樣式錯位


一 / 使用確認組件時候 

this.$confirm('確認移除', '提示', {
     confirmButtonText: '確定',
     cancelButtonText: '取消',
     type: 'warning'
}).then(() => {
       this.deleteFn("removeGroup",row); 
}).catch((error) => {
        console.log(error)
 });;

點擊了確定,沒有執行刪除的方法,

經排查,原來 不僅進入了then中,還進行了catch中,說明,在then中有報錯, 

打印錯誤定位,找到錯誤,更改后就好了

 

二 使用分頁切換的時候,點擊搜索之后,頁碼回到了第一頁, 我想要的效果是搜索的時候,在哪頁就是哪頁,不進行跳轉回第一頁

<el-pagination @size-change="changePageSizeFn"  class="f-r" @current-change="changePageFn" :pager-count="5"
  :current-page.sync="pageOption.currPage" :page-sizes="pageOption.defaultpagesizes" :page-size="pageOption.defaultpagesize"
   layout="sizes, prev, pager, next, jumper" :total="tableOptions.total">
</el-pagination>



 

 

手動計算了當前的頁碼,對 pageOption.currPage 進行了賦值,發現依然回到第一頁,

排查之后發現,兩點

1)需要 :current-page.sync  必須寫sync

2)需要將pageOption.currPage = 4 這個賦值,放在請求到表格數據之后

 

三、關於element-ui的表格,在不同的tab,來回切換的時候,不同tab下的表格會出現錯位的情況

解決方法:1)官網上給了一個方法doLayout ,this.$refs.table.doLayout();

      剛開始我的不知道為什么,提示報錯doLayout不是一個函數,但是這個this.$refs.table 確實是拿到這個表格的dom元素,后來發現因為我的這個表格是封裝的一個組件,我是直接在組件上寫了ref=table,所以沒有起作用,大家

      可以試一下在el-table上加ref,估計會起作用;

        2)由於我第一次嘗試doLayout不起作用,我就找了第二種方法,在切換的時候,給table組件身上加一個v-if,就解決了

 

三、關於element-ui的 文本域的問題

問題描述:在一個彈框中的三個步驟中,每個步驟中都一個各自的form表單,每個表單中都有一個input(type=‘textarea’);我發現我在第二個步驟中改變input的大小的時候,會影響到第三步驟中的input的大小;毫無關聯的兩個input怎么會將高度 關聯起來呢?

原因:經過一段時間,發現了 原因,平常我們的label都是一個常量,比如:label=“我是一個label”; 這樣的話,就算每個lable都是這個名稱也不會有影響;

    我的項目中需要有中英文切換,所以label是這樣寫的

     :label="$t('strategyCenter.args')" ,(第二個步驟中) 

          好巧的是,

   第三步驟中的那個input的label也是 用這個名稱 所以第三步中的label  :label="$t('strategyCenter.args')";

    導致兩個沒有關系的input產生了關聯;

  

解決:在中英文的文件中,再定義一個名稱的變量,兩個分開用就好了

四、關於element-ui的 radio的回顯切換不生效的問題

問題描述:在編輯表單的時候,radio切換不生效

原因:因為這個radio是后來新加上的,但是原先的列表的數據中沒有這個代表radio的字段;新增的是可以切換的,但是對原來的數據,編輯的時候,不生效

解決:在拿到要回顯的數據data之后,先對數據增加改字段,然后對data進行深克隆;接着將data賦值給form

  如:data - 在我點擊當前列的編輯操作時獲取到當前列的數據  returnForm.aa是radio  v-model綁定的值

    此時新增的字段是aa;但是data中沒有aa這個字段;手動添加data.aa = data.aa||"";

    this.returnForm =  JSON.parse(JSON.stringify(data));

    這樣就可以解決了

  

 

五、關於element-ui的 列合並

問題描述:在element-ui的table示例中,對table的合並單元格是固定的就第一行,兩兩合並,只能兩兩合並,實際項目中的需求是根據數據進行合並,我的原數據結構是,如下,同一數據源進行合並

data = [
    {
        source:"aa",
        fields:"aa_1",
        rules:[
            {fields:"aa_1"},
            {fields:"aa_2"},
            {fields:"aa_3",}
        ]
    },
   {
        source:"aa",
        fields:"aa_2",
        rules:[
            {field:"aa_1"},
            {field:"aa_2"},
            {field:"aa_3",}
        ]
    },
    {
        source:"aa",
        fields:"aa_3",
        rules:[
            {field:"aa_1"},
            {field:"aa_2"},
            {field:"aa_3",}
        ]
    },
    {
        source:"bb",
        fields:"bb_1",
        rules:[
            {field:"bb_1"}
        ]
    }
]                

要對數據進行處理

data.forEach(item=>{
    if(item.rule.length){
        item.rule.forEach((irm,irx)=>{
           if(irm.field == item.fields){
               item.ruleindex = irx;
            }
         });
     }else{
         item.ruleindex = 0;
     };
});
每次更換數據源的時候,
ruleindex 從0開始
data = [
    {
        source:"aa", fields:"aa_1",
     ruleindex:0,  rules:[ {fields:"aa_1"}, {fields:"aa_2"}, {fields:"aa_3",} ] }, { source:"aa", fields:"aa_2",
     ruleindex:1, rules:[ {field:"aa_1"}, {field:"aa_2"}, {field:"aa_3",} ] }, { source:"aa", fields:"aa_3",
     ruleindex:2, rules:[ {field:"aa_1"}, {field:"aa_2"}, {field:"aa_3",} ] }, { source:"bb", fields:"bb_1",
     ruleindex:0, rules:[ {field:"bb_1"} ] } ]
 
         

 官網中的方法:

objectSpanMethod({ row, column, rowIndex, columnIndex }) {
   if (columnIndex === 0) {   //第一列
       if (rowIndex % 2 === 0) {  //每兩行
            return {
              rowspan: 2,
              colspan: 1
            };
       } else {
           return {
             rowspan: 0,
             colspan: 0
           };
       }
   }
}
項目中使用的方法

objectSpanMethod({ row, column, rowIndex, columnIndex }) { let obj
={}; let num = row.rule.length;//項目中要合並的列數 let rowNum = row.ruleindex; //給每一條數據都加一個標識索引 let spanLists =[0,4,7]; //要合並的列的索引集合 if (spanLists.includes(columnIndex)) { if (rowNum % num == 0) { //被合並的單元格的起始行列位置 obj = { rowspan:num, colspan:num>0?1:0 }; } else { //其他被合並的行列都設置為0,意被隱藏 obj= { rowspan: 0, colspan: 0 }; }; return obj; } }

 合並關鍵點是 被合並的單元格的起始單元格設置對應的行列合並即可,其他被合並的單元格應該將行列設置為0(隱藏這些單元格)

再來一個簡單的例子

customData:[
                {
                    name:"endView",
                    type:"dia.ElementView",
                    span:0,
                    num:1,
                    desc:`我們連接到的ElementView。元素模型可以通過endView.model訪問;這對於編寫基於元素屬性的條件邏輯可能很有用。`,
                }, 
                {
                    name:"endMagnet",
                    type:"SVGElement",
                    span:1,
                    num:1,
                    desc:`頁面中的SVGElement,它包含我們要連接到的磁鐵(元素/子元素/端口[element/subelement/port])。`,
                }, 
                {
                    name:"anchorReference",
                    type:"g.Point",
                    span:2,
                    num:2,
                    desc:`對鏈接路徑的另一個組件的引用,可能是找到這個錨點所必需的。如果我們為一個源錨調用這個方法,它是第一個頂點,
                            或者如果沒有頂點則是目標錨。如果我們為一個目標錨調用這個方法,它是最后一個頂點,或者如果沒有頂點源錨…`,
                }, 
                {
                    name:"anchorReference",
                    type:"SVGElement",
                    span:2,
                    num:1,
                    desc:`…如果所討論的錨不存在(還不存在),它就是連接端的磁鐵。(內置方法通常使用該元素的中心點作為參考。)`,
                }, 
                {
                    name:"args",
                    type:"object",
                    span:4,
                    num:1,
                    desc:`一個對象,它帶有附加的可選參數,用戶在調用它時將其傳遞給錨定方法(args屬性)。`,
                }, 
      ],

上方例子中,數據是固定的,需求是合並第一列的第三和第四行,

 

我可以直接寫,第二行 rowspan: 2,colspan: 1,第三行是行列都為0

objectSpanMethod({ row, column, rowIndex, columnIndex }) {
      if (columnIndex === 0) {
        if (rowIndex == 2) {
          return {
            rowspan: 2,
            colspan: 1
          };
        }else if (rowIndex == 3) {
          return {
            rowspan: 0,
            colspan: 0
          };
        }
      }
}

 

也可以如下這么寫,前提是將 row中的span(設置為和索引一樣的值,被合並的數據(非起始被合並的,而是除起始的其他合並行數據)那一條數據設置為一個其他值,不等於索引就可) 和num(要合並幾行的數量)先算好
    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
      if (columnIndex === 0) {
        if (row.span == rowIndex) {
          return {
            rowspan: row.num,
            colspan: 1
          };
        }else {
          return {
            rowspan: 0,
            colspan: 0
          };
        }
      }
    }

 

六、關於element-ui 動態生成表單,表單中有select(創建條目)的操作,在編輯回顯的時候,賦值改該model為[],但是提示一下報錯,但是實際情況卻是,這個v-model綁定的類型確實應該是一個數組

 

原因:由於是動態渲染的表單,所以,有可能是因為這個select還沒有渲染好,導致出現了該問題

解決問題 : 在表單的form賦值的時候,加一個定時器,延遲賦值,等頁面渲染好再進行賦值

 

 


免責聲明!

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



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