Blind bind a doppio senso non rilevato quando viene aggiornato da JS

blazor javascript

Domanda

Ho un semplice componente bindato a due vie:

<input type="text"  id="myInput" bind="@MyVar" />
...
@functions {
    private string MyVar { get; set; } = "foo";

Tutto funziona bene quando scrivo testo sulla casella di input. Ma, se il valore di input è impostato da javascript, il blazor non è in grado di rilevare il valore modificato.

<input type="text"  id="myInput" bind="@MyVar" />
...
@functions {
    private string MyVar { get; set; } = "foo";

Ho provato ad aumentare alcuni eventi su elementi come 'premuto il tasto' e così, ma la var privata MyVar non ha modifiche sul lato client blazor.

Vorrei rimandare al blazor alcuni valori del client, immagino che cambiare il valore di un input nascosto possa essere una soluzione, ma non funzionante.

Risposta accettata

Quando inserisci un valore nella casella di input viene generato un evento, e quindi Blazor lo sa, e aggiorna la proprietà (MyVar) a cui è associato il riquadro di input (questo è anche il modo in cui funziona il binding angolare a due vie), ma quando cambi il valore della casella di input da JavaScript, Blazor non ha modo di sapere di questa occorrenza.

Ma, hey, perché dovresti fare una cosa del genere?

Per inviare dati da JavaScript a Blazor, devi definire un metodo pubblico e statico in Blazor, annotato con attributibute [JSInvokable] e una funzione JavaScript che chiama questo metodo:

[JSInvokable]
public static Task SendMessageAsync(string message)
{
    // Do something with message
}

DotNet.invokeMethodAsync(assemblyName, 'SendMessageAsync', "Hello Blazor");

Leggi di più qui: https://blogs.msdn.microsoft.com/webdev/2018/07/25/blazor-0-5-0-experimental-release-now-available/




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché