Можем ли мы использовать компонент Blazor как веб-компонент на обычной HTML-странице, отличной от Blazor?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Можем ли мы использовать компонент Blazor как веб-компонент на обычной HTML-странице, отличной от Blazor?

Сообщение Anonymous »

Можем ли мы визуализировать компонент Blazor как независимый фрагмент DOM или каким-либо другим образом использовать его как стандартный веб-компонент на стандартной странице HTML/JS?
Это может быть наивный вопрос с архитектурной точки зрения Blazor. Я далеко не эксперт по Blazor, но думаю, что это может быть полезным методом для постепенной модернизации устаревших веб-приложений. Я удивлен, что это официально не поддерживается.
Для иллюстрации рассмотрим этот простой пример веб-компонента, который отображает пользовательский элемент :

Код: Выделить всё

// define a custom web component
customElements.define("date-info", class DateInfo extends HTMLElement {
constructor() {
super();
// create an "open" (vs "closed") shadow DOM,
// i.e., accessible to the outside JavaScript
this.attachShadow({ mode: "open" });
}

async connectedCallback() {
console.log(`${this.constructor.name}.${this.connectedCallback.name} called`);

// get the content from the server,
// this could be a Blazor component markup
try {
const response = await fetch("https://worldtimeapi.org/api/ip");
const data = await response.json();
const content = new Date(data.utc_datetime).toString();
this.shadowRoot.innerHTML = `${content}`;
}
catch(e) {
console.error(e);
const info = document.createTextNode(e.message);
this.shadowRoot.appendChild(info);
}
}
});

Код: Выделить всё

Current time: 


Теперь вместо загрузки https://worldtimeapi.org/api/ ip, я хотел бы получить и отобразить отдельную разметку для компонента Blazor/Server, например:

Код: Выделить всё

@* this is a Blazor component *@
@(DateTime.Now)
Более того, я ожидаю, что эта разметка останется функциональной и динамичной, т. е. события DOM на стороне клиента и обновления на стороне сервера для этого компонента Blazor будут распространяться в обоих направлениях, через жизненный цикл веб-компонента-оболочки.
Конечно, можно сделать это Blazor @page и загрузить в iframe, но я предпочитаю хочу отобразить его как часть DOM внешней страницы.
На данный момент я столкнулся с этим:
  • < li>Очевидно, это не было одной из целей дизайна Blazor в 2018 году:
    https://github.com/dotnet/aspnetcore/issues/16033.
  • Позже Стив Сандерсон создал (неофициальную) библиотеку для изолированного тестирования компонентов Blazor, которую теоретически можно использовать для получения автономной разметки компонента Blazor: https://stackoverflow.com/ a/60457390/1768303.
    Это лучший подход к решению этой проблемы на данный момент?


Подробнее здесь: https://stackoverflow.com/questions/688 ... non-blazor
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»