TiG*_*reX 5 c# asp.net-core blazor
我刚刚开始查看 blazor (v0.3) 并进行了一些测试,我想使用 blazor 添加一个列表
首先我创建了一个List<string>来测试同一页面中的简单列表
<ul>
@foreach (var item in listItems)
{
<li>@item</li>
}
</ul>
@functions {
private List<string> listItems = new List<string>();
private string newItem;
private void AddItem()
{
if (string.IsNullOrEmpty(newItem))
return;
listItems.Add(newItem);
newItem = "";
}
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,当我添加它时将每个元素添加到列表中。但是后来,我尝试添加组件,添加单个组件很容易,基于这里的这个问题,但是对于列表,我遇到了下一个问题:
<li>组件只是为了测试组件的功能,这里是组件视图Run Code Online (Sandbox Code Playgroud)<li id="@ID"> @Text </li> @functions { [Parameter] string Text { get; set; } [Parameter] string ID { get; set; } }
Run Code Online (Sandbox Code Playgroud)<input type="text" bind="TxtExample" name="inpAdd"/> <button onclick="@addCompoment">add comp1</button> <div class="simple-list-list">
@if (!componentListTest.Any())
{
<p>You have no items in your list</p>
}
else
{
<ul>
@foreach (var item in componentListTest)
{
@item
}
</ul>
}
</div>
@functions {
private List<RenderFragment> componentListTest { get; set; }
private int currentCount {get; set;}
private string TxtExample { get; set; }
protected override void OnInit()
{
currentCount = 0;
componentListTest = new List<RenderFragment>();
}
protected void addCompoment()
{
componentListTest.Add(CreateDynamicComponent(currentCount));
currentCount++;
}
RenderFragment CreateDynamicComponent(int counter) => builder =>
{
var seq = 0;
builder.OpenComponent(seq, typeof(listExample));
builder.AddAttribute(++seq, "Text", "text -- "+TxtExample);
builder.AddAttribute(++seq, "id","listed-"+counter);
builder.CloseComponent();
};
}
Run Code Online (Sandbox Code Playgroud)
但是当我进入第二个时,所有这些都被最后一个替换了:
知道发生了什么吗?
你把它弄得太复杂了。您不需要动态实例化组件来让这个场景工作。
你可以做一个:
<ul>
@foreach (var item in listItems)
{
<myComponent bind-myVar="@item"></myComponent>
}
</ul>
Run Code Online (Sandbox Code Playgroud)
并且组件将为您实例化。
另请参阅此处如何使参数适用于您的组件。
| 归档时间: |
|
| 查看次数: |
9600 次 |
| 最近记录: |