martes, 5 de mayo de 2020
 Normalmente un componente Blazor declara parámetros para permitir que otros componentes o páginas que lo utilicen puedan pasarle la información que necesita para funcionar.
Normalmente un componente Blazor declara parámetros para permitir que otros componentes o páginas que lo utilicen puedan pasarle la información que necesita para funcionar.Por ejemplo, el siguiente código en el interior de un componente definiría un par de propiedades llamadas
Text y Repeat, que utiliza para repetir un texto tantas veces como se le indique:@* File: Repeater.razor *@
@for (var i = 0; i < Repeat; i++)
{
    <p>@Text</p>
}
@code {
    [Parameter]
    public string Text { get; set; }
    [Parameter]
    public int Repeat { get; set; }
}
<Repeater Text="Hola" Repeat="6" />
Para ello, Blazor dispone de una especie de mecanismo catch all que nos permite tener acceso a todos los parámetros suministrados al utilizar un componente. Esto lo conseguimos estableciendo a cierto el valor del parámetro
CaptureUnmatchedValues al definir un parámetro de tipo Dictionary<string, object>:@* File: Capturer.razor *@
<ul>
    @if (ExtraParams != null)
    {
        foreach (var (key, value) in ExtraParams)
        {
            <li>@key = @value (@value.GetType().Name)</li>
        }
    }
</ul>
@code {
    [Parameter(CaptureUnmatchedValues = true)]
    public Dictionary<string, object> ExtraParams { get; set; } 
}
Obviamente, en un componente sólo puede existir un parámetro configurado de esta manera.Así, al utilizar el componente anterior de la siguiente forma...
<Capturer Key1="Value1" Key2="1" Key3 />
- Key1 = Value1 (String)
- Key2 = 1 (String)
- Key3 = True (Boolean). Fijaos que este caso es especial porque se trata de un atributo booleano: su simple presencia ya lo establece a cierto.
Por ejemplo, imaginad que los parámetros de nuestro componente se definen de la siguiente manera:
[Parameter(CaptureUnmatchedValues = true)]
public Dictionary<string, object> ExtraParams { get; set; } 
[Parameter]
public string Text { get; set; }
Text será establecido correctamente, mientras que en ExtraParams sólo encontraremos el valor de Foo:<MyComponent Text="Hola" Foo="Bar" />
@attributes. Por ejemplo, imaginad que queremos implementar un componente llamado InputWithLabel que encapsule un tag <input> con su correspondiente etiqueta, y que podamos utilizar de la siguiente forma:<InputWithLabel Text="Enter your full name" type="text" maxlength="50"></InputWithLabel>
InputWithLabel.razor sería establecer una propiedad para recuperar el valor de Text, y luego un diccionario para el resto de parámetros, que serían asignados tal cual al <input>. El código podría ser como el siguiente:@* File: InputWithLabel.razor *@
<label>@Text</label>
<input @attributes="Params" />
@code {
    [Parameter]
    public string Text { get; set; }
    [Parameter(CaptureUnmatchedValues = true)]
    public Dictionary<string, object> Params { get; set; }
}
Publicado en Variable not found.


 
 
 



 
 
 
 
 
 
 
 
 
 
3 Comentarios:
Interesantísimo artículo José María. Sin duda Blazor apunta maneras. Sería genial algún libro o curso en español sobre Blazor, no te animas? Gracias por compartir!
Hola! Muchas gracias por tu comentario.
La verdad es que sí, Blazor tiene una pinta fantástica :) Para ver si me animaré a un libro o curso aún es pronto, porque aún estoy estudiándolo y la versión definitiva de una de las patas más importantes (Blazor Wasm) aún no ha sido lanzada oficialmente (queda poco, eso sí). Iremos viendo.
Saludos!
No recuerdo haber probado algo nuevo tan AWESOME como BLAZOR!
Enviar un nuevo comentario