polymer-3.x - 使用 lit-element 与 shadowDom 中的内部组件交互的正确方法是什么?
问题描述
我正在尝试在我的自定义组件中使用纸质对话框。
我希望能够从组件外部打开对话框。做这个的最好方式是什么?(所有示例都直接在组件上工作)
该对话框还要求我在其上调用“open()”来打开它。
在我发现的示例中,我发现:
this.$.dialog.open();
但这似乎不适用于 lit-element
我使用shadowRoot让它工作,不确定这是最好的选择:
render() {
return html`
<style>
</style>
<paper-dialog id="dialog">
<h2>Content</h2>
</paper-dialog>
`;
}
firstUpdated(changedProperties) {
console.log("firstUpdated called")
if (this.shown == "true")
{
// this.$.dialog.open();
this.shadowRoot.getElementById("dialog").open()
}
}
我向我的元素添加了一个名为“显示”的属性
static get properties() {
return {
shown: Boolean,
认为我可以将它从外部传递到我的组件中,但它似乎也没有解决问题(我可以使用自定义元素属性设置一次,但从外部对其进行更改似乎不起作用。
解决方案
通常,如果您在具有其他 UI 元素的元素中聚合对话框,则不应从元素外部显示/隐藏对话框 - 触发对话框的事件应引发并使用包含元素进行处理。
也就是说,如果绝对有必要,那么我更喜欢“showDialog”方法(不是属性)。关闭对话框应该由对话框按钮或失去焦点触发,因此您不需要公开关闭方法。
推荐阅读
- authentication - 在 localStorage 的标头中设置 JWT 令牌以进行重定向
- javascript - 我需要使用 localStorage 的帮助
- python - PyCharm - 来自外部范围的阴影名称
- prometheus - [普罗米修斯]普罗米修斯中的目标宕机后再也回不来会发生什么
- project-planning - 考虑到要求,在规划 Web 应用程序时首先要开始什么?
- django - django with celery error:没有配置结果后端
- c++ - 我在 cmake make install fmm 中有错误
- ruby - 安装 pod 时出错 - 0x00000001045b8000 处的总线错误
- java - Scala(Shell):java.lang.InternalError:格式错误的类名
- python - if df.A=0 & df.b=1 then df.c=1/ pandas python