场景:
在我的 webComponent-health-check.js 文件中:
static get properties() {
return {
plan:Object,
};
}
<div class="body"><p class="title">${this.plan.title}</p></div>
和
在我的 index.html 文件中,我像下面这样传递json:
<health-check plan='{ "title" : "Solution Architecure",
"status" : "Approved" }'></health-check>
但是它不会在我的健康状况检查组件中显示标题
问题:
在我的健康检查组件中显示标题。
有什么想法吗?
答案 0 :(得分:0)
我认为您不能通过html文件传递对象,因为它只是html而不是lit-element或lit-html,并且lit-html在这种情况下似乎不尝试解析值(更新定义属性的另一种方法,请参见下文)。但是当然,您仍然可以传递字符串并将其解析到元素内部。
在index.html
<health-check planString='{
"title": "Solution Architecure",
"status": "Approved"
}'>
</health-check>
在health-check.js中
class HealthCheck extends LitElement {
static get properties () {
return {
planString: String
}
}
render () {
return html`
<div class='body'>
<p class='title'>${JSON.parse(this.planString).title}</p>
</div>
`
}
}
但是我建议将代码包装在像my-app元素这样的单个入口点中
在index.html
<my-app></my-app>
在app.js中
class App extends LitElement {
render () {
return html`
<health-check .plan='${{
title: 'Solution Architecure',
status: 'Approved'
}}'>
</health-check>
`
}
}
在health-check.js中
class HealthCheck extends LitElement {
static get properties () {
return {
plan: Object
}
}
constructor () {
super()
this.plan = {}
}
render () {
return html`
<div class='body'>
<p class='title'>${this.plan.title}</p>
</div>
`
}
}
更新
您可以定义属性类型,以告诉lit-element如何序列化和反序列化。
class HealthCheck extends LitElement {
static get properties () {
return {
plan: {
type: {
fromAttribute (value) {
return JSON.parse(value)
}
}
}
}
}
render () {
return html`
<div class='body'>
<p class='title'>${this.plan.title}</p>
</div>
`
}
}
注意:这段代码是用lit-element 0.6.x和lit-html 0.11.x
编写的