mirror of https://github.com/vuejs/core.git
feat(custom-element): support css `:host` selector by applying css vars on host element (#8830)
close #8826
This commit is contained in:
parent
917c0631cc
commit
03a9ea2b88
|
@ -4,6 +4,7 @@ import {
|
|||
Suspense,
|
||||
Teleport,
|
||||
createStaticVNode,
|
||||
defineCustomElement,
|
||||
h,
|
||||
nextTick,
|
||||
reactive,
|
||||
|
@ -381,4 +382,26 @@ describe('useCssVars', () => {
|
|||
expect((c as HTMLElement).style.getPropertyValue(`--color`)).toBe('red')
|
||||
}
|
||||
})
|
||||
|
||||
// #8826
|
||||
test('with custom element', async () => {
|
||||
const state = reactive({ color: 'red' })
|
||||
const container = document.createElement('div')
|
||||
const App = defineCustomElement({
|
||||
styles: [`div { color: red; }`],
|
||||
setup() {
|
||||
useCssVars(() => state)
|
||||
return () => {
|
||||
return h('div', 'hello')
|
||||
}
|
||||
},
|
||||
})
|
||||
customElements.define('css-vars-ce', App)
|
||||
container.innerHTML = `<css-vars-ce></css-vars-ce>`
|
||||
document.body.appendChild(container)
|
||||
await nextTick()
|
||||
expect(container.innerHTML).toBe(
|
||||
`<css-vars-ce style="--color: red;"></css-vars-ce>`,
|
||||
)
|
||||
})
|
||||
})
|
||||
|
|
|
@ -38,7 +38,11 @@ export function useCssVars(getter: (ctx: any) => Record<string, string>) {
|
|||
|
||||
const setVars = () => {
|
||||
const vars = getter(instance.proxy)
|
||||
setVarsOnVNode(instance.subTree, vars)
|
||||
if (instance.ce) {
|
||||
setVarsOnNode(instance.ce as any, vars)
|
||||
} else {
|
||||
setVarsOnVNode(instance.subTree, vars)
|
||||
}
|
||||
updateTeleports(vars)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue