Как использовать двустороннюю привязку данных в проекте библиотеки компонентов Blazor - PullRequest
0 голосов
/ 19 июня 2020

Я хотел бы поделиться некоторыми базовыми c входными компонентами между проектами Blazor, но мне кажется, что в моем общем проекте бритвы чего-то не хватает, когда дело доходит до поддержки привязки данных.

Использование привязки компонентов Microsoft пример здесь .

Код компонента выглядит так:

    Password: <input
    value="@Password"
    @oninput="OnPasswordChanged"
    type="@(showPassword ? "text" : "password")" />

<label><input type="checkbox" @bind="showPassword" />Show password</label>

@code {
    private bool showPassword;

    [Parameter]
    public string Password { get; set; }

    [Parameter]
    public EventCallback<string> PasswordChanged { get; set; }

    private Task OnPasswordChanged(ChangeEventArgs e)
    {
        Password = e.Value.ToString();
        return PasswordChanged.InvokeAsync(Password);
    }
}

, а затем он используется следующим образом:

<PasswordBox @bind-Password="password" />

@code {
    string password;
}

Когда Компонент объявлен непосредственно в моем проекте Blazor WebAssembly, это работает, как ожидалось. Однако, если я перемещаю компонент в библиотеку, чтобы использовать его в общих компонентах, я получаю ошибку компиляции:

Ошибка Имена атрибутов не могут быть выведены из атрибута связывания 'bind-Password'. Атрибуты привязки должны иметь форму 'bind' или 'bind-value' вместе с соответствующими дополнительными параметрами, такими как 'bind-value: event', 'bind: format'

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

В настоящее время я ссылаюсь на:

  • NETStandard.Library 2.1

  • Microsoft.AspNetCore.Components (3.1.5)

  • Microsoft.AspNetCore.Components.Web (3.1.5)
  • System. Net .Http. Json (3.2.1)

Этого кажется достаточно для обычного связывания атрибутов для полей и передачи значений от одного компонента к другому, но не для этого c синтаксиса двустороннего связывания. Что мне не хватает?

1 Ответ

1 голос
/ 19 июня 2020
  1. Определены ли ваши компоненты в библиотеке компонентов Razor?
  2. Добавили ли вы ссылку на приложение Blazor для проекта библиотеки?
  3. Самое главное, определяете ли вы маршрутизируемые ( украшены директивой @page) в ваших проектах библиотеки?
  4. У вас есть проект SharedObjects, в котором вы определяете объекты, которые используются в проекте библиотеки компонентов Razor и проекте приложения Blazor? Вы добавляете ссылку на проект SharedObjects в оба проекта?
...