javascript - 渲染函数内的模板无法解析 - LitElement
问题描述
我试图通过 ajax 调用获取列表,但在它被解析之前,render()
方法被调用并且依赖于 Promise 的模板片段无法解析并抛出未定义。
问题:在我从 Promise 中获取数据之前,如何显示加载器?
import {
LitElement,
html
} from 'lit-element';
class EmpComponent extends LitElement {
constructor() {
super();
this.data = this.getEmpData();
}
getEmpData() {
fetch('../../../emp-data.json')
.then(
function(response) {
if (response.status !== 200) {
console.log('Looks like there was a problem. Status Code: ' +
response.status);
return;
}
response.json().then(data => data);
}
)
.catch(function(err) {
console.log('Fetch Error :-S', err);
});
}
render() {
<div>
${this.data.map(emp => emp.active ? this.dataTemplate(emp) : '')}
</div>
}
}
customElements.define('emp-component', EmpComponent);
收到此错误:
解决方案
第 1 步:创建一个js
返回true
或的文件false
(例如 util.js)
export function when(expression, truVal, falseVal) {
if (expression) {
return truVal();
}
if (falseVal) {
return falseVal();
}
return undefined;
}
第 2 步:js
在您的文件中导入 util
import {
LitElement,
html
} from 'lit-element';
import {
when
} from 'util.js'
第 3 步:在isLoading
. static get properties
所以在初始加载时,我们设置onload
为 trueconstructor
import {
LitElement,
html
} from 'lit-element';
import {
when
} from 'util.js'
class EmpComponent extends LitElement {
static get properties() {
return {
isLoading: {
type: Boolean
},
}
}
constructor() {
super();
this.isLoading = true;
}
第 4 步:一旦获取数据,我们就可以渲染 DOM。然后我们可以设置isLoading
为 false 然后使用渲染 DOMwhen
static get properties() {
return {
isLoading: {
type: Boolean
},
canRender: {
type: Boolean
}
}
}
constructor() {
super();
this.isLoading = true;
this.canRender = false;
this.data = this.getEmpData();
this.isLoading = false;
this.canRender = true;
}
render() {
return html `
${when(this.isLoading,() => html`<p>Loading...</p>`)}
${when(this.canRender,() => html`<your-component></your-component>`)}
`
}
这是until
. 你可以从这个博客sabarinath blog获得更多细节
推荐阅读
- c - 当路径名太长时,glibc 的 syscall open 实现在哪里设置 ENAMETOOLONG errno?
- laravel - 如何急切加载(一对多)平均和排序
- azure - 事件中心的 Azure 数据资源管理器检查点
- angularjs-directive - 如何防止 AngularJS 路由使用 ~ (波浪号)对 url 参数进行编码
- json - JSON 数组到 JSON 对象
- javascript - JavaScript 减去零更改结果
- python - 使用 python3 list(set(arr)) 意外的间歇性执行
- java - 如何使用 CSVWriter 将字符串转换为 CSV 文件
- sql - PostgreSQL 检查 Golang 中的空数组更改行为
- javascript - 模型未从视图中获取所有属性值(仅限新添加的属性)