問題描述
使用element多選checkbox組件,點擊勾選取消勾選,視圖未變化,再次點擊表單其他元素,多選組件勾選狀態發生變化,視圖和數據未同步
- 第一次嘗試:再
el-checkbox-group
多選父組件上增加點擊事件,但是每次勾選并未觸發,而是點表單其他元素之后才會觸發當前事件。
- 第二次嘗試:使用
vue. set
this.$set(this.storeItem, 'array', list)這樣修改后確實也起作用了。
🍔 注意:這里使用 vue.set 起作用根本是,瞎貓碰上死耗子,不能響應的原因根本不是這個這里我們根本沒有添加 array屬性,而只是去改變了array 屬性的值,vue按理說應該是能夠檢測到的。
- 最后解決方法:
el-checkbox-group與el-check的數據同步有些問題
給每個el-checkbox
增加一個屬性checked
和一個事件change
<el-checkbox-group v-model="dutyForm.hazardFactorsIds" ><el-checkboxv-for="item in hazardFactorsList":key="item.ID":label="item.ID":checked="checked"@change="checked=!checked">{{ item.Name }}</el-checkbox>
</el-checkbox-group>--------js-數據層-----hazardFactorsList: [{ID: 'FK1',Name: '窒息(缺氧)'},{ID: 'FK2',Name: '中毒'},{ID: 'FK3',Name: '燃爆/爆炸'},{ID: 'FK4',Name: '機械傷害'},{ID: 'FK5',Name: '淹溺'}
],
checked: false // 這個 checked 沒有任何作用,只是為了繞開elment 的這個坑
再每次修改<el-checkbox-group>的 v-model 的值的時候,先將 checked 設置為 false
vue2經常會出現視圖和數據不同步的問題,盡量少使用vue.set
方式,多操作狀態的改變來影響視圖
直接復制代碼,可以看見視圖和數據現在保持一致了