当通过另一个组件发送的 dispatchEvent 调用它时,我无法打开纸质对话框。这会触发覆盖,但不会显示对话框。
我有以下组件设置:
- 一个通用父组件,包含 2 个带有自定义子页面的铁页面,以及一个触发事件的侦听器
- 第一个页面组件:它有一个触发自定义事件的按钮
- 第二个页面组件:包含打开对话框的功能。
目标是通过调度的事件,从第一个子页面组件,这被父组件捕获,并在第二个页面组件上调用一个方法,打开一个纸质对话框。当事件在同一个组件上触发和捕获时,这可以正常工作,但在不同组件正在播放时则不行......纸质对话框没有打开。相反,只有背景被激活。
下面是一些代码片段(不完整以保持紧凑):
1) 父组件,包含 2 个子组件并拥有一个监听器
<dom-module id="parent-comp">
<template>
//....
<div class="main-frame">
<iron-pages id="pages" selected="[[state]]" attr-for-selected="state" fallback-selection="first">
<child-page-component id="first" state="first"></child-page-component>
<child-page-component id="second" state="second"></child-page-component>
</iron-pages>
/....
<template>
//....
<script>
class ParentPage extends Polymer.Element {
// ... all needed stuff...
ready(){
super.ready();
// LISTEN FOR event 'test-dialog' !!
this.addEventListener('test-dialog', (e) => this._onTestEvent(e));
}
//...
_onTestEvent(e){
// When event is hit, call the second child method...
this.$.second.callTestEvent();
}
}
//....
</script>
2)在第一个子组件中,有一个按钮触发了由父级捕获的dispatchEvent ...
// ....
<paper-button raised on-tap="_test">Test</paper-button>
// ....
<script>
class ChildPageComponent extends Polymer.Element {
//....
_test(){
// FIRE CUSTOM EVENT 'test-dialog'
this.dispatchEvent(new CustomEvent('test-dialog', {
bubbles: true, composed: true, detail: {}
}));
}
//....
3)在第二个子组件中,有一个对话框定义,以及一个可以从父组件调用的函数。
// ....
<paper-dialog id="dialogtst" modal>
<div>
<h1>hello</h1>
</div>
<div class="buttons">
<paper-button dialog-confirm>Close</paper-button>
</div>
</paper-dialog>
// ....
// ....
<script>
class ChildPageComponent extends Polymer.Element {
//....
callTestEvent(){
// Open Dialog....
this.$.dialogtst.open(); // SHOULD OPEN RIGHT??
}
//....
但如前所述,全屏被模态背景覆盖,并且不显示任何对话框。当通过按钮直接调用,在任何组件上,或者当事件被捕获在同一个组件中时,这一切都有效......但当它传递给父级时......
有人可以解释为什么以及如何让它工作吗? 所有的建议都非常受欢迎!