Zwei-Wege-Bindung von Blazor wird nicht erkannt, wenn sie von JS aktualisiert wird

blazor javascript

Frage

Ich habe eine einfache bidirektionale Komponente:

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

Alles läuft gut, wenn ich Text auf Eingabefeld schreibe. Wenn der Eingabewert jedoch über Javascript festgelegt wird, kann blazor den geänderten Wert nicht erkennen.

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

Ich habe versucht, einige Ereignisse auf Element wie 'Taste gedrückt' und so, aber die private var MyVar hat keine Änderungen auf blazor Client-Seite.

Ich möchte einige Werte vom Client an blazor zurücksenden, ich denke, der Wert einer versteckten Eingabe kann eine Lösung sein, funktioniert aber nicht.

Akzeptierte Antwort

Wenn Sie einen Wert in das Eingabefeld eingeben, wird ein Ereignis ausgelöst, und Blazor weiß dies, und es aktualisiert die Eigenschaft (MyVar), an die das Eingabefeld gebunden ist (dies ist die Funktionsweise der angularen Zweiwege-Bindung) Wenn Sie den Wert der Eingabebox von JavaScript ändern, kann Blazor nichts über dieses Vorkommen wissen.

Aber, warum, würdest du so etwas tun?

Um Daten von JavaScript an Blazor zu senden, sollten Sie eine öffentliche und statische Methode in Blazor definieren, die mit dem Attribut [JSInvokable] annotiert ist, und eine JavaScript-Funktion, die diese Methode aufruft:

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

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

Lesen Sie hier mehr: https://blogs.msdn.microsoft.com/webdev/2018/07/25/blazor-0-5-0-experimental-release-now-available/




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum