将字符串转换为无序列表
Converting string to unordered list
对于一个随机实验,我试图使用 Stencil 建立一个购物清单。我的输入将是一个字符串,即。 "cauliflower, cucumber" 含有购物清单上的成分。我希望将此字符串转换为无序列表。
把字符串转成数组没问题。从数组到列表,我尝试使用 for 循环,遍历数组中的所有选项并将它们添加到列表中。
export class ShoppingList {
@Prop() veggies: string;
private makeList(typeString: string): HTMLUListElement {
var listArray: string[] = typeString.split(',');
for(var i=0; i<listArray.length; i++) {
// Create the list element:
var list = document.createElement('ul');
// Create the list item:
var item = document.createElement('li');
// Set its contents:
item.appendChild(document.createTextNode(listArray[i]));
// Add it to the list:
list.appendChild(item);
}
return list;
}
private getVeggies(): HTMLUListElement {
return this.makeList(this.veggies);
}
render() {
return (
<div>
veggies:
<ul>{this.getVeggies()}</ul>
</div>
);
}
}
index.html 文件通过以下行运行此代码:
<shopping-list veggies="Cauliflower, cucumber" ></shopping-list>
我期望输出 veggies: * cauliflower \n *cucumber
。相反,我只是得到一个空列表 veggies:
。检查元素时,我得到以下 HTML 输出:
<div>veggies:<ul><undefined></undefined> </ul><br></div>
您正在混合 DOM 个节点和 VDOM nodes。使用 VDOM 您可以删除手动创建 DOM 节点的代码:
export class ShoppingList {
@Prop() veggies: string;
private makeList(typeString: string): HTMLUListElement {
var listArray: string[] = typeString.split(',');
return (
<ul>
{listArray.map((item) => <li>{item}</li>)}
</ul>
);
private getVeggies(): HTMLUListElement {
return this.makeList(this.veggies);
}
render() {
return (
<div>
veggies:
{this.getVeggies()}
</div>
);
}
}
首先,我更改了 makeList
,因此它 returns VDOM 和 loop over the items 使用 map
而不是 for
循环.我还从 render()
方法中删除了 <ul>
,因为 makeList
已经 returns 它了。
对于一个随机实验,我试图使用 Stencil 建立一个购物清单。我的输入将是一个字符串,即。 "cauliflower, cucumber" 含有购物清单上的成分。我希望将此字符串转换为无序列表。
把字符串转成数组没问题。从数组到列表,我尝试使用 for 循环,遍历数组中的所有选项并将它们添加到列表中。
export class ShoppingList {
@Prop() veggies: string;
private makeList(typeString: string): HTMLUListElement {
var listArray: string[] = typeString.split(',');
for(var i=0; i<listArray.length; i++) {
// Create the list element:
var list = document.createElement('ul');
// Create the list item:
var item = document.createElement('li');
// Set its contents:
item.appendChild(document.createTextNode(listArray[i]));
// Add it to the list:
list.appendChild(item);
}
return list;
}
private getVeggies(): HTMLUListElement {
return this.makeList(this.veggies);
}
render() {
return (
<div>
veggies:
<ul>{this.getVeggies()}</ul>
</div>
);
}
}
index.html 文件通过以下行运行此代码:
<shopping-list veggies="Cauliflower, cucumber" ></shopping-list>
我期望输出 veggies: * cauliflower \n *cucumber
。相反,我只是得到一个空列表 veggies:
。检查元素时,我得到以下 HTML 输出:
<div>veggies:<ul><undefined></undefined> </ul><br></div>
您正在混合 DOM 个节点和 VDOM nodes。使用 VDOM 您可以删除手动创建 DOM 节点的代码:
export class ShoppingList {
@Prop() veggies: string;
private makeList(typeString: string): HTMLUListElement {
var listArray: string[] = typeString.split(',');
return (
<ul>
{listArray.map((item) => <li>{item}</li>)}
</ul>
);
private getVeggies(): HTMLUListElement {
return this.makeList(this.veggies);
}
render() {
return (
<div>
veggies:
{this.getVeggies()}
</div>
);
}
}
首先,我更改了 makeList
,因此它 returns VDOM 和 loop over the items 使用 map
而不是 for
循环.我还从 render()
方法中删除了 <ul>
,因为 makeList
已经 returns 它了。