【发布时间】:2021-04-14 15:28:44
【问题描述】:
我想为我的项目创建一个导航组件。 shell 获取包含章节信息的 json,这些被传递给 nav-element,后者递归调用自身来渲染导航树。
shell.js
import { LitElement, html, css } from 'lit-element';
import {until} from 'lit-html/directives/until.js';
import './nav-element.js';
export class Shell extends LitElement {
static get properties() {
return {
configjson : { type: Array }
};
}
constructor() {
super();
this.configjson = fetch('./src/convertjson_test.json').then(res => res.json());
}
render() {
return html`
<main>
some content
<nav-element .chapters=${until(this.configjson, [])} root></nav-element>
</main>
`;
}
}
customElements.define('shell', Shell);
导航元素.js
import { LitElement, html, css } from 'lit-element';
import {until} from 'lit-html/directives/until.js';
import {repeat} from 'lit-html/directives/repeat.js';
export class NavElement extends LitElement {
static get properties() {
return {
chapters: {type: Array},
root: {type: Boolean} //to mark the root node
};
}
static get styles() {
return css`
.navheader {
display: none;
}
.navheader[active] {
display: block;
}
`;
}
render() {
return html`
<div class="navHeader" ?active="${this.root}">header</div>
${until(repeat(this.chapters, (chapter) => chapter.pos, (chapter) => html`<div>${chapter.n}<nav-element .chapters=${chapter.c}></nav-element></div>`))}
`;
}
}
customElements.define('nav-element', NavElement);
问题是,configjson Promise 作为属性传递,但在调用 nav-element 时尚未解决,所以我收到错误:
Uncaught (in promise) TypeError: this.chapters is undefined
搜索了所有lit-element 和lit-html 文档,until 指令解决了shell 中的问题,但没有解决nav-element 中的问题。
相同的编码模式在Polymer 2 中运行良好(&3,尽管使用 ajax 而不是 fetch)。有谁知道如何仅使用 lit-element 解决这个问题?
【问题讨论】:
标签: lit-element lit