Прежде чем ответить, я просто хочу упомянуть, что портал является экспериментальным элементом и доступен только в Chrome Canary после активации, посетив chrome: //flags/#enable-portals.
Кажется, есть проблема с созданием элемента портала в шаблоне / shadowDOM. Вот обходной путь, который работал для меня. В основном это программно создание элемента портала в основном DOM и добавление его в качестве дочернего элемента к пользовательскому элементу. Обратите внимание, что я добавил тестовую кнопку в компонент, чтобы я мог видеть что-то, чтобы щелкнуть.
import { LitElement, html, css } from 'lit-element';
class TestElement extends LitElement {
constructor() {
super();
this._portalSrc = 'https://wicg.github.io/portals/';
}
render() {
const template = html`<button type="button" @click="${this._portalClickHandler}">TEST</button>`;
return template;
}
_portalClickHandler() {
var node = document.createElement("portal");
node.src = this._portalSrc;
document.querySelector('test-element').appendChild(node);
console.log(document.querySelector('portal').src);
document.querySelector('portal').activate();
}
}
customElements.define('test-element', TestElement);