Blazor “@ref” 指的是循环命令中的最后一个元素
Blazor “@ref” refers to the last element in loop command
“@ref”指的是当前正确的元素。
“@ref”指的是循环命令中最后一个不正确的元素(在我的示例中,是 table 元素的最后一个 tr 元素)。
我希望“@ref”单独引用每个元素(在我的示例中,table 元素的每个 tr 元素)而不是最后一个元素。
@inject IJSRuntime JsRuntime;
<table class="table">
<tbody>
@foreach (var item in Items)
{
<tr @ref="@row" @onclick="() => {Rowclick(row);}">
<td>@item</td>
</tr>
}
</tbody>
</table>
@code
{
public string[] Items = new string[] { "Tomas", "Jack", "Michael" };
public async void Rowclick(ElementReference row)
{
await JsRuntime.InvokeAsync<object>("updateBackgroundColor", row);
}
}
//--------------------------
<script type="text/javascript">
function updateBackgroundColor(row) {
row.bgColor = 'red';
}
</script>
尝试这样的事情。 js部分没试过
@for (int i = 0; i < Items.Length; i++)
{
<p @ref="Refs[i]">@Items[i]</p>
}
@code {
public string[] Items = new string[] { "Tomas", "Jack", "Michael" };
ElementReference[] Refs = new ElementReference[4];
}
这是你的答案:
@using Microsoft.AspNetCore.Components;
@inject IJSRuntime JsRuntime;
<table class="table">
<tbody>
@foreach (var item in Items)
{
<tr @ref:suppressField @ref="@item.Row" @onclick="@(() => {ClickForTestRow(item.Row);})">
<td>@item.Name</td>
</tr>
}
</tbody>
</table>
@code {
[Parameter]
public IList<MyModel> Items { get; set; }
public async void ClickForTestRow(ElementReference row)
{
await JsRuntime.InvokeAsync<object>("updateBackgroundColor", row, "red");
}
public class MyModel
{
public ElementReference Row { get; set; }
public string Name { get; set; }
}
}
//----------------
<script type="text/javascript">
function updateBackgroundColor(row) {
row.bgColor = 'red';
}
</script>
“@ref”指的是当前正确的元素。
“@ref”指的是循环命令中最后一个不正确的元素(在我的示例中,是 table 元素的最后一个 tr 元素)。
我希望“@ref”单独引用每个元素(在我的示例中,table 元素的每个 tr 元素)而不是最后一个元素。
@inject IJSRuntime JsRuntime;
<table class="table">
<tbody>
@foreach (var item in Items)
{
<tr @ref="@row" @onclick="() => {Rowclick(row);}">
<td>@item</td>
</tr>
}
</tbody>
</table>
@code
{
public string[] Items = new string[] { "Tomas", "Jack", "Michael" };
public async void Rowclick(ElementReference row)
{
await JsRuntime.InvokeAsync<object>("updateBackgroundColor", row);
}
}
//--------------------------
<script type="text/javascript">
function updateBackgroundColor(row) {
row.bgColor = 'red';
}
</script>
尝试这样的事情。 js部分没试过
@for (int i = 0; i < Items.Length; i++)
{
<p @ref="Refs[i]">@Items[i]</p>
}
@code {
public string[] Items = new string[] { "Tomas", "Jack", "Michael" };
ElementReference[] Refs = new ElementReference[4];
}
这是你的答案:
@using Microsoft.AspNetCore.Components;
@inject IJSRuntime JsRuntime;
<table class="table">
<tbody>
@foreach (var item in Items)
{
<tr @ref:suppressField @ref="@item.Row" @onclick="@(() => {ClickForTestRow(item.Row);})">
<td>@item.Name</td>
</tr>
}
</tbody>
</table>
@code {
[Parameter]
public IList<MyModel> Items { get; set; }
public async void ClickForTestRow(ElementReference row)
{
await JsRuntime.InvokeAsync<object>("updateBackgroundColor", row, "red");
}
public class MyModel
{
public ElementReference Row { get; set; }
public string Name { get; set; }
}
}
//----------------
<script type="text/javascript">
function updateBackgroundColor(row) {
row.bgColor = 'red';
}
</script>