Blazor - Как создавать компоненты динамически - PullRequest
0 голосов
/ 01 мая 2018

Я хочу проверить, возможно ли динамическое создание компонентов Blazor.

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

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Для людей (таких как я), которые являются новичками в Blazor, стоит отметить, что вам не обязательно добавлять компоненты динамически, на самом деле вам, вероятно, не нужно в большинстве случаев.

Возьмите пример страницы / компонента, который показывает заказ на продажу, а затем имеет дочерний компонент для каждой строки заказа на продажу. У вас может быть код, который выглядит так на вашей странице бритвы:

  @foreach (var salesOrderLine in _salesOrder.salesOrderlines)
  {
    <SalesOrderLine>@salesOrderLine</SalesOrderLine>
  };

Если бы у вас была кнопка, которая добавила еще одну строку заказа на продажу, вы могли бы просто добавить новую запись в модель * / 1006 * модель / представление в событии нажатия этих кнопок. Нажатие кнопок обычно запускает повторную визуализацию, поэтому на странице должен автоматически отображаться дополнительный компонент SalesOrderLine.

Ключевым моментом здесь (для тех из MVC фона) является то, что нет необходимости пытаться вручную вводить новый HTML-код в DOM или динамически загружать частичное представление, как в MVC, Blazor сделает это. сделай это для тебя.

Если какое-то другое действие изменяет состояние заказа на продажу или строки заказа на продажу, и Blazor не замечает необходимости обновлять эту часть самого DOM, тогда вы можете подтолкнуть его, добавив строку:

this.StateHasChanged();

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

Несмотря на сходство синтаксиса между бритвенными страницами для MVC и для Blazor, модель Blazor концептуально гораздо ближе к чему-то вроде React, чем к MVC, очень важно понимать, что что-то похоже на shadow-DOM на заднем плане.

На этой странице есть несколько хороших указателей о привязке данных в Blazor.

0 голосов
/ 01 мая 2018

Для версии 0.2 это ответ Стива Сандерсона:

Мы реализуем более приятные API для построения RenderFragments в будущем, но сейчас вы можете

@CreateDynamicComponent();
@functions {
    RenderFragment CreateDynamicComponent() => builder =>
    {
        builder.OpenComponent(0, typeof(SurveyPrompt));
        builder.AddAttribute(1, "Title", "Some title");
        builder.CloseComponent();
    };
}

Это очень низкоуровневые API (даже не документированные), поэтому мы надеемся, что не многим людям нужно делать это прямо сейчас. API более высокого уровня для этого появятся позже.

Найдено здесь

...