gpt4 book ai didi

polymer - 具有对象类型属性的 Lit 元素

转载 作者:行者123 更新时间:2023-12-01 23:37:52 27 4
gpt4 key购买 nike

如何使用具有对象类型属性的 Lit-element?我认为定义 myelement 有效:

static get properties() {
return {
whales:Object
}
}
constructor() {
super();
this.whales={"nb":0};
}

html,这也适用:

       <my-element id="mytest" whales='{"nb":2}'></my-element>

但我无法让 setAttribute 工作:

myElement.setAttribute("whales", {"nb":4});

编辑:谢谢mishu,你的回答帮助我解决了我的问题。如果有人想知道,这是完整的工作示例。然而,还有一件事我无法开始工作:我不知道如何以声明方式为属性赋予初始值,如果该值是一个对象(对象作为字符串处理)。

index.html:

    <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Lit-html test</title>
</head>
<body>
<script type="module" src="./components/my-e.js"></script>

<button id="reset" onclick="reset()">reset</button>
<p>1 works: <my-e id="mytest"></my-e></p>
<p>2 doesn't work: <my-e id="mytest2" person='{"name":"Joe", "age":32}'></my-e></p>
<script src="main.js"></script>
</body>
</html>

主要.js:

     function updatePerson(e) {
var myE = e.target;
myE.person = e.detail;
myE._requestRender();
}
function reset() {
var p = { "name": "Jack", "age": 20 };
var myE = document.getElementById('mytest');
myE.person = p;
myE._requestRender();

myE = document.getElementById('mytest2');
myE.person = p;
myE._requestRender();
}
document.getElementById('mytest').addEventListener('person', updatePerson);
document.getElementById('mytest2').addEventListener('person', updatePerson);

我的-e.js:

import { LitElement, html } from './lit-element.js';
class MyE extends LitElement {
static get properties() {
return {
person: Object
}
}
constructor() {
super();
this.person = { "name": "Paul", "age": 40 };
this.addEventListener('click', async (e) => {
await this.renderComplete;
var p = {};
p.name = this.person.name + ", a";
p.age = this.person.age + 1;
this.dispatchEvent(new CustomEvent('person', { detail: p }))
});
}
_render({ person }) {
return html`
<p> Name: ${person.name}</p>
<p>Age: ${person.age}</p>
`;
}
}
customElements.define('my-e', MyE);

最佳答案

您正在尝试更新一个属性,而不是真正设置一个属性,并且您没有对该属性设置 reflectToAttribute。但是你可以尝试简单地使用:

myElement.whales = {nb: 4};

更新:我看到您更改了问题的“范围”。因此,只要 JSON 正确,您就应该能够以声明方式传递对象。你可以在 this demo 中看到它.

关于polymer - 具有对象类型属性的 Lit 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50248345/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com