优化单选组件
parent
18119bab27
commit
78b3f3f063
|
@ -23,9 +23,14 @@ export default class RadioGroup {
|
||||||
/* render */
|
/* render */
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateChildrenStat() {
|
_updateChildrenStat(checkAll) {
|
||||||
Array.from(this.children).forEach(it => {
|
Array.from(this.children).forEach(it => {
|
||||||
if (it.tagName === 'WC-RADIO' && it.root) {
|
if (it.tagName === 'WC-RADIO' && it.root) {
|
||||||
|
if (checkAll) {
|
||||||
|
it.disabled = this.disabled
|
||||||
|
it.readOnly = this.readOnly
|
||||||
|
}
|
||||||
|
|
||||||
if (it.value === this.props.value) {
|
if (it.value === this.props.value) {
|
||||||
it.checked = true
|
it.checked = true
|
||||||
} else {
|
} else {
|
||||||
|
@ -64,6 +69,7 @@ export default class RadioGroup {
|
||||||
this.props.readonly = false
|
this.props.readonly = false
|
||||||
this.removeAttribute('readonly')
|
this.removeAttribute('readonly')
|
||||||
}
|
}
|
||||||
|
this._updateChildrenStat(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
get disabled() {
|
get disabled() {
|
||||||
|
@ -83,6 +89,7 @@ export default class RadioGroup {
|
||||||
this.props.disabled = false
|
this.props.disabled = false
|
||||||
this.removeAttribute('disabled')
|
this.removeAttribute('disabled')
|
||||||
}
|
}
|
||||||
|
this._updateChildrenStat(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
|
@ -90,10 +97,21 @@ export default class RadioGroup {
|
||||||
this.value = ev.detail
|
this.value = ev.detail
|
||||||
this.dispatchEvent(new CustomEvent('input'))
|
this.dispatchEvent(new CustomEvent('input'))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.__observer = new MutationObserver(_ => {
|
||||||
|
console.log('-00000')
|
||||||
|
this._updateChildrenStat(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
this.__observer.observe(this, {
|
||||||
|
childList: true,
|
||||||
|
subtree: true
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
unmount() {
|
unmount() {
|
||||||
$.unbind(this, 'child-picked', this._pickedFn)
|
$.unbind(this, 'child-picked', this._pickedFn)
|
||||||
|
this.__observer.disconnect()
|
||||||
}
|
}
|
||||||
|
|
||||||
watch() {
|
watch() {
|
||||||
|
@ -108,11 +126,8 @@ export default class RadioGroup {
|
||||||
if (k === 'readonly') {
|
if (k === 'readonly') {
|
||||||
k = 'readOnly'
|
k = 'readOnly'
|
||||||
}
|
}
|
||||||
Array.from(this.children).forEach(it => {
|
console.log('---', k, val, Array.from(this.children))
|
||||||
if (it.tagName === 'WC-RADIO' && it.root) {
|
this[k] = val !== null
|
||||||
it[k] = val !== null
|
|
||||||
}
|
|
||||||
})
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue