亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

V-chip 未向父級發出輸入事件

V-chip 未向父級發出輸入事件

一只甜甜圈 2023-09-14 18:16:21
我本來希望自己能解決這個問題,但我完全陷入困境。歡迎任何幫助。基本上,該組件打印一個 100x10 的矩陣,如下所示:威脅 1:資產類型 1 資產類型 2 資產類型 3 資產類型 4 [...]威脅2:資產類型1 資產類型2 資產類型3 資產類型4 [...]威脅 3:資產類型 1 資產類型 2 資產類型 3 資產類型 4 [...]威脅 4:資產類型 1 資產類型 2 資產類型 3 資產類型 4 [...][...]基本上,每種威脅都與不同類型的資產相關。威脅和資產類型都是動態的,并從 GraphQL 后端檢索。每行都是一個 v-chip-group,控制該行上的 v-chip(資產類型),整個矩陣由幾個 v-for 動態構成:<v-row    v-for="(threat, index) in threats"  :key="threat.short">      <v-col>        <v-card">          {{threat.id}}.- {{threat.name}}        </v-card>      </v-col>      <v-col>          <v-chip-group             :value="associations[index]"            multiple          >          <v-chip             v-for="(type, index2) in assettypes"             :key="type.id"            @click="getClick(index, index2)"          >          </v-chip>      </v-chip-group>      </v-col></v-row>[...]// This function gets the row and the column clickedgetClick(row, column){    //this.$refs.$emit("input")    var position = this.associations[row].indexOf(column)    if (position > -1){      this.associations[row][position] = -1    } else {      this.associations[row][this.associations[row].length] = column    }  },我在這件事上遇到了幾個問題。矩陣并不是很大,但足夠大,不想經常渲染它(我需要用更大的矩陣做一些非常類似的事情,也許是 150 x 100)。內容存儲在名為“associations”的多維數組中,該數組在開頭使用push() 進行初始化。我發現的第一件事是,使用 v-model,所有 v-chip 都可以通過單擊 v-chip 來渲染。我無法獲得獨特的 v 芯片密鑰,我想這可能就是原因。所以我轉向 v-bind 和 @click 的自定義事件處理程序。然后,我發現使用 splice() 和 Push() 會導致相同的重新渲染,因此我恢復為直接分配(array[] = some),并將重新渲染減少到僅 v-chip被點擊。我知道我可能讓事情變得太復雜了,但無論如何,這似乎暫時解決了,我現在想不出更好的解決方案?,F在的問題是,每行的第一次點擊似乎“迷路了”。簡而言之,V-chip 不會發出 input() 事件,并且 v-chip 不會更新,但僅在第一次單擊時更新。第一次單擊后,同一行上的下一次單擊將完美運行。我還發現,第一次單擊會重新呈現表格上的所有元素。我不明白為什么,真誠的。然后我發現了一個有趣的事情。只是為了讓它工作,我在點擊處理程序的開頭添加了“this.$refs.$emit("input")”行。被評論的那個。我收到一個 Vue 警告“v-on 處理程序中的錯誤:“TypeError:this.$refs.$emit 不是一個函數”,這似乎合乎邏輯......但它有效:輸入事件由 v-chip 發出,并且第一次點擊時頁面沒有呈現。但我不明白為什么,因為它根本沒有意義(對我來說)。我懷疑初始重新渲染和未發出的輸入事件有關,但我找不到問題的根源。歡迎任何想法、建議。
查看完整描述

1 回答

?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

幾個想法:

:key這可能是與您不獨特相關的問題之一。

而不是:key="threat.short"嘗試:key="`threat-short-${index}`"

檢查控制臺日志是否有任何重復的關鍵警告。

此外,這可能是由于Vue 數組反應性的:value="associations[index]"工作方式所致。

我懷疑 Vue 由于使用了這樣的數組而沒有對第一次點擊做出反應。

你可以將它包裝在一個函數中:

getRow(index){
???return?this.associations[index];
}

或者作為測試,嘗試僅為 1 行創建一個計算屬性,看看是否可以修復該問題。如果確實如此,那么這可能是您的問題。

您能否制作一個在線演示來展示該錯誤?然后我也許可以修復它。


查看完整回答
反對 回復 2023-09-14
  • 1 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號