【发布时间】:2021-05-26 01:40:41
【问题描述】:
我有一个自定义组件InlineAutocomplete。无论我做什么,我的pic 值和SelectedPIC 值在我进行验证时始终为空,并且不确定为什么会这样。
组件确实呈现正确,但无法以正确设置的值取回我的参数。
用法如下:
<InlineAutocomplete TItem="PIC"
Value="@pic"
Selected="@SelectedPIC"
Data="@PICs"
Property="@((item) => item.PICNumber)" />
我的组件:
<div class="inline-autocomplete">
<input @oninput="(e)=> SuggestItem(e)" type="text" @bind-value="@Value" class="overlap inline-autocomplete-input " />
<input readonly class="overlap inline-autocomplete-label" value="@_suggestedValue" />
</div>
@code {
string _value;
string _suggestedValue;
[Parameter]
public string Value
{
get => _value;
set
{
if (value == null)
return;
_value = value;
}
}
[Parameter]
public List<TItem> Data { get; set; }
[Parameter]
public Func<TItem, string> Property { get; set; }
[Parameter]
public TItem Selected { get; set; }
void SuggestItem(ChangeEventArgs e)
{
if (string.IsNullOrEmpty(e.Value.ToString()))
return;
Value = e.Value.ToString().ToUpper();
if (string.IsNullOrEmpty(Value))
{
_suggestedValue = string.Empty;
}
else
{
var selectedItem = Data.Select(Property).FirstOrDefault(x => x.StartsWith(Value, StringComparison.OrdinalIgnoreCase));
_suggestedValue = !string.IsNullOrWhiteSpace(selectedItem) ? selectedItem : string.Empty;
Selected = Data.FirstOrDefault(x => string.Equals(Property(x), Value, StringComparison.OrdinalIgnoreCase));
StateHasChanged();
}
// State has changed
StateHasChanged();
}
}
【问题讨论】:
-
似乎是一个通用类型的组件,但没有
@typeparam TItem指令。这看起来不像是一个完整的组件代码示例。我看不到_value或声明的其他本地值 -
你能不能像我一样用其他重命名 Value 属性,尽管这个词非常常用,而且在所有语言中这是保留词,所以它可能会在你给定的地方引用。跨度>
-
@Quango,为了节省空间,这是一个不完整的例子。 _value 只是一个常规字段
string _value;@Ajay2707 使用大写来命名 Blazor 属性是正常的,因为它们要模仿的属性。例如Value => value、Class => class等...
标签: c# blazor blazor-webassembly