customElements.define('el-attr-tag-name', E)
container.innerHTML = '<el-attr-tag-name tag-name="foo">'
const e = container.childNodes[0] as VueElement
+ expect(e.shadowRoot!.innerHTML).toBe(`foo`)
expect(e.tagName).toBe(`EL-ATTR-TAG-NAME`)
- expect(`[Vue warn]: Failed setting prop "tagName" `).toHaveBeenWarned()
})
})
}
// defining getter/setters on prototype
+ const propValue: Record<string, any> = {}
for (const key of declaredPropKeys.map(camelize)) {
- if (key === 'tagName') continue
+ if (key in this) propValue[key] = this[key as keyof this]
Object.defineProperty(this, key, {
get() {
- return this._getProp(key)
+ return key in propValue ? propValue[key] : this._getProp(key)
},
set(val) {
+ if (key in this) propValue[key] = val
this._setProp(key, val, true, true)
},
})
shouldReflect = true,
shouldUpdate = false,
): void {
- if (key === 'tagName') {
- if (__DEV__) {
- warn(
- `Failed setting prop "${key}" on <${this.tagName.toLowerCase()}>: ` +
- `TypeError: Cannot set property tagName of #<Element> which has only a getter`,
- )
- }
- return
- }
if (val !== this._props[key]) {
if (val === REMOVAL) {
delete this._props[key]