Skip to content

Commit 434f0fa

Browse files
committed
fix: The template does not define the corresponding attribute, and assigns a number type directly through el, throw an wran of a string #5793
1 parent 28b3e1b commit 434f0fa

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

packages/runtime-dom/__tests__/customElement.spec.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,23 @@ describe('defineCustomElement', () => {
231231
el['max-age'] = 100
232232
expect(el.maxAge).toBe(100)
233233
})
234+
235+
test('set number value in dom property', () => {
236+
const E = defineCustomElement({
237+
props: {
238+
maxAge: Number
239+
},
240+
render() {
241+
return `max age: ${this.maxAge}/type: ${typeof this.maxAge}`
242+
}
243+
})
244+
customElements.define('my-element-number-property', E)
245+
const el = document.createElement('my-element-number-property') as any
246+
container.appendChild(el)
247+
el.maxAge = 50
248+
expect(el.maxAge).toBe(50)
249+
expect(el.shadowRoot.innerHTML).toBe('max age: 50/type: number')
250+
})
234251
})
235252

236253
describe('emits', () => {

packages/runtime-dom/src/apiCustomElement.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,10 +222,12 @@ export class VueElement extends BaseClass {
222222
// cast Number-type props set before resolve
223223
let numberProps
224224
if (hasOptions) {
225-
for (const key in this._props) {
225+
for (const key in props) {
226226
const opt = props[key]
227227
if (opt === Number || (opt && opt.type === Number)) {
228-
this._props[key] = toNumber(this._props[key])
228+
if (key in this._props) {
229+
this._props[key] = toNumber(this._props[key])
230+
}
229231
;(numberProps || (numberProps = Object.create(null)))[key] = true
230232
}
231233
}

0 commit comments

Comments
 (0)