使用lit.html

时间:2018-09-20 10:34:07

标签: polymer

场景:

在我的 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>

但是它不会在我的健康状况检查组件中显示标题


问题:

  • 使用lit.html渲染对象值?
  • 在我的健康检查组件中显示标题。

    有什么想法吗?

1 个答案:

答案 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

编写的