fix(custom-element): fix initial attr type casting for programmtically created elements

fix #4772
This commit is contained in:
Evan You
2021-10-09 18:34:49 -04:00
parent c803eb15ec
commit 3ca83179d1
2 changed files with 30 additions and 12 deletions

View File

@@ -174,17 +174,6 @@ export class VueElement extends BaseClass {
}
this.attachShadow({ mode: 'open' })
}
// set initial attrs
for (let i = 0; i < this.attributes.length; i++) {
this._setAttr(this.attributes[i].name)
}
// watch future attr changes
new MutationObserver(mutations => {
for (const m of mutations) {
this._setAttr(m.attributeName!)
}
}).observe(this, { attributes: true })
}
connectedCallback() {
@@ -212,9 +201,21 @@ export class VueElement extends BaseClass {
if (this._resolved) {
return
}
this._resolved = true
// set initial attrs
for (let i = 0; i < this.attributes.length; i++) {
this._setAttr(this.attributes[i].name)
}
// watch future attr changes
new MutationObserver(mutations => {
for (const m of mutations) {
this._setAttr(m.attributeName!)
}
}).observe(this, { attributes: true })
const resolve = (def: InnerComponentDef) => {
this._resolved = true
const { props, styles } = def
const hasOptions = !isArray(props)
const rawKeys = props ? (hasOptions ? Object.keys(props) : props) : []