【发布时间】:2022-12-28 22:01:52
【问题描述】:
我使用 Vite 和 Vue3 创建了独立的 Web 组件来替换旧的 jQuery 库。
在 html 中呈现时,它看起来像:
<custom-datepicker id="deliveryTime">
#shadow-root
<div>...actual component...</div>
</custom-datepicker>
当用户选择日期时,如果我可以将属性 value 设置为此元素,那将是完美的,例如:
<custom-datepicker value="selected value HERE" ...
因此表单可以通过它的 id 从元素中使用这个值。
问题是我设法实现这一目标的唯一方法是从我的 Web 组件发出事件 (selected) 并监听该事件,因此表单可以使用值,例如:
const datepicker = document.querySelector('#deliveryTime');
const dateSelected = (e) => {
datepicker.value = e.detail.val;
}
window.addEventListener('selected', dateSelected);
如果我在 web 组件中设置 value 属性,应用程序的其余部分(Apache Velocity 模板)将无法访问它,因为它位于 shadow-root 中:
<custom-datepicker id="deliveryTime">
#shadow-root
<div value="selected value is sadly HERE">...actual component...</div>
</custom-datepicker>
是否有可能从 Web 组件内部实现这一点(这样我就可以省略监听器)?
【问题讨论】:
标签: javascript vue.js vuejs3 web-component