Двухсторонняя привязка Blazor не обнаружена, когда обновляется с JS

blazor javascript

Вопрос

У меня есть простой двухсторонний связанный компонент:

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

Все работает нормально, когда я пишу текст в поле ввода. Но, если входное значение установлено из javascript, тогда blazor не сможет обнаружить измененное значение.

document.getElementById('myInput').value='Random Value';

Я попытался поднять некоторые события на элемент, например «нажатие клавиши», и так, но частный var MyVar не имеет изменений на стороне клиента Blazor.

Я хотел бы отправить обратно, чтобы blazor некоторые значения от клиента, я думаю, изменение значения скрытого ввода может быть решением, но не работает.

Принятый ответ

Когда вы вводите значение в поле ввода, возникает событие, и, таким образом, Blazor знает об этом и обновляет свойство (MyVar), к которому привязано поле ввода (это slso, как работает угловое двустороннее связывание), но когда вы меняете значение поля ввода из JavaScript, Blazor не имеет возможности узнать об этом событии.

Но, эй, зачем ты так поступаешь?

Чтобы отправить данные с JavaScript на Blazor, вы определяете публичный и статический метод в Blazor, аннотированный с помощью attibute [JSInvokable], и ​​функцию JavaScript, которая вызывает этот метод:

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

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

Подробнее читайте здесь: https://blogs.msdn.microsoft.com/webdev/2018/07/25/blazor-0-5-0-experimental-release-now-available/




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему