我本來希望自己能解決這個問題,但我完全陷入困境。歡迎任何幫助。基本上,該組件打印一個 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 發出,并且第一次點擊時頁面沒有呈現。但我不明白為什么,因為它根本沒有意義(對我來說)。我懷疑初始重新渲染和未發出的輸入事件有關,但我找不到問題的根源。歡迎任何想法、建議。
V-chip 未向父級發出輸入事件
一只甜甜圈
2023-09-14 18:16:21