Vue動態(tài)添加class可能帶來的問題解讀(被覆蓋)
Vue動態(tài)添加class可能帶來的問題
使用vue的伙伴相信都會使用動態(tài)class方便修改元素樣式,
也就是下面這種

通過控制flag 的 true / false 來決定addClass 這個類是否生效
當然,如果需求僅僅如上述圖片所述,是不會出現什么問題的
現在有一個額外的dom操作
為span 動態(tài)添加了一個類(此處 后面會著重說明場景)
例如:
為他添加一個 red 類:

下面是addRedClass方法:(this as any) 是為了解決vue3 + ts 使用$refs 報錯問題 不是本章的重點,
重點在于:
通過js dom操作為span元素添加.red類樣式
methods:{
addRedClass(){
(this as any).$refs['span'].classList.add('red')
}
}以下為 vue動態(tài)class 會覆蓋掉 通過dom操作添加的class樣式 的復現
默認狀態(tài):


點擊 第二個按鈕 (js 為span添加類名為red的class) :


當點擊第一個按鈕 (vue動態(tài)class)


到這里,可以發(fā)現 通過js 添加的red類。 在點擊vue動態(tài)class按鈕后,被覆蓋掉了,自然 red的樣式也消失了, 這顯然不是我們期待的結果,我們期待的結果應該是 同時出現
class=“static red addClass”
三種情況才對
問題復現完畢
現在是解釋剛剛紅字提到的內容:
在日常開發(fā)中,既然使用vue 開發(fā) 其實很少情況會 自己手動 通過js 使用dom 為元素添加class,但是我們除了使用vue開發(fā),還會使用一些第三方 框架輔助, 例如bootstrap等,
這些框架 可能在他本身 會通過js 操作dom 元素為其添加class 從而達到 一些樣式效果,而vue 動態(tài)class 卻會覆蓋掉本該 為bootstrap提供效果的class,從而出現一些 難以預料的bug
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
vue3+vite中使用import.meta.glob的操作代碼
在vue2的時候,我們一般引入多個js或者其他文件,一般使用? require.context 來引入多個不同的文件,但是vite中是不支持 require的,他推出了一個功能用import.meta.glob來引入多個,單個的文件,下面通過本文介紹vue3+vite中使用import.meta.glob,需要的朋友可以參考下2022-11-11

