我想为我的项目创建一个导航组件。shell
获取一个带有章节信息的 json,这些被传递给,nav-element
它递归地调用自身来渲染导航树。
外壳.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 解决这个问题?