ssr-custom-element.html 916 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <script src="../../dist/vue.global.js"></script>
  2. <my-element
  3. ><template shadowrootmode="open"><button>1</button></template></my-element
  4. >
  5. <my-element-async
  6. ><template shadowrootmode="open"
  7. ><button>1</button></template
  8. ></my-element-async
  9. >
  10. <script>
  11. const {
  12. h,
  13. ref,
  14. defineSSRCustomElement,
  15. defineAsyncComponent,
  16. onMounted,
  17. useHost,
  18. } = Vue
  19. const def = {
  20. setup() {
  21. const count = ref(1)
  22. const el = useHost()
  23. onMounted(() => (el.style.border = '1px solid red'))
  24. return () => h('button', { onClick: () => count.value++ }, count.value)
  25. },
  26. }
  27. customElements.define('my-element', defineSSRCustomElement(def))
  28. customElements.define(
  29. 'my-element-async',
  30. defineSSRCustomElement(
  31. defineAsyncComponent(
  32. () =>
  33. new Promise(r => {
  34. window.resolve = () => r(def)
  35. }),
  36. ),
  37. ),
  38. )
  39. </script>