Я пытаюсь создать свой собственный компонент с системой флажков, чтобы узнать, нужен ли мне атрибут (типа int / float и т. Д.)

<input type="checkbox" @bind="isMinInt" />
@if (isMinInt == true) {
    <input type="number" @bind="MinInt"/>
}

Итак, я хотел бы заменить это @if:

@if(isMinInt == true) {
    <MyComponent @bind-Value="ValueInt" Min="@MinInt"/>
} else {
    <MyComponent @bind-Value="ValueInt"/>
}

Чем-то вроде

<MyComponent @bind-Value="ValueInt" 
             @if(isMinInt == true ? Min="@MinInt" : String.Empty />

Потому что у меня будет много атрибутов в моем компоненте, и я хотел бы упростить его

РЕДАКТИРОВАТЬ + Решение

Теперь используя @attributes:

<input type="checkbox" @bind="isMinInt" />
@if (isMinInt == true) {
   <input type="number" @bind="MinInt" />
}

<MyComponent @bind-Value="ValueInt" @attributes="GetAttributesInt()" />

@code {
    private bool isMinInt = false;
    private int MinInt;

    private IDictionary<string, object> GetAttributesInt() {
       var dict = new Dictionary<string, object>() { };
       if (isMinInt)
         dict.Add("Min", MinInt);
       return dict;
    }
}

ИЗМЕНИТЬ + Решение 2

Теперь используя @attributes:

<input type="checkbox" @bind="isMinInt" />
@if (isMinInt == true) {
   <input type="number" @bind="MinInt" />
}

<MyComponent @bind-Value="ValueInt" @attributes="GetAttributesInt()" />

@code {
    private bool isMinInt = false;
    private int MinInt;

    private IDictionary<string, object> GetAttributesInt() {
       var dict = new Dictionary<string, object>() { };
       dict["Min"] = this.isMinInt ? MinInt : Int32.MinValue;
       return dict;
    }
}

Я использую Int32.MinValue потому, что MyComponent соответствует <input type="number">, где его min привязан к моему MinInt, поэтому, если я использую 0 вместо Int32.MinValue я не могу использовать отрицательные числа.

3
yToxide 30 Окт 2019 в 12:03

1 ответ

Я использовал это простое решение, и оно сработало, надеюсь, оно вам тоже поможет:

<input id="@InputId"  aria-labelledby="@(!string.IsNullOrWhiteSpace(InputId) ? "this is test" : null)">
0
zoha_sh 20 Авг 2021 в 16:38