需求:表格中的checkbox有三種狀態:隱藏、禁用、可選。
原本是希望AntDesign中存在相應的option來配置隱藏checkbox,但沒找到。只有在rowSelection裏通過設置getCheckboxProps的相關屬性配置。
既然無法直接在渲染列表時就決定隱藏和顯示,
那就換個思路:等列表渲染完成後,再去隱藏checkbox。
問題:如何找到列表中需要隱藏的checkbox呢?
我的思路就是:
通過getCheckboxProps給需要隱藏的checkbox加個隱藏標誌,然後列表渲染完後,通過操作dom,給相應的元素加個樣式隱藏掉。
相關實現:
1、給要隱藏的checkbox,設置它的name爲‘disabled’
private getCheckboxProps(record: any) {
return {
props: {
name: !record.isAuthority ? 'disabled' : '',
disabled: record.isDisabled || !record.isAuthority
}
}
}
2、然後再操作dom,給它個隱藏樣式
private hiddenCheckbox() {
const displayCheckboxList = document.getElementsByName('disabled')
displayCheckboxList.forEach((item: any) => {
item.parentNode.parentNode.parentNode.className = item.className + ' hidden'
})
}
你會發現,怎麼這麼搞笑,要去往上找3層父級呢。
是因爲,如果只是隱藏了這個初始狀態的checkbox,當你點擊全選的時候,這個checkbox是會再次出現的,並且是勾選狀態的。
(因爲點擊全選,antDesign會重新賦值類名,如果hidden加在這層就會被覆蓋掉了)
所以我就直接往上,把父級給隱藏掉。
但其實這個都是蠢辦法,講道理可以更快捷的,就是:
在getCheckboxProps裏把它給禁用掉再隱藏,那你頁面中的任何操作都不會算進這個checkbox了。
這個實現也還挺簡單的。