Это может быть наивный вопрос с архитектурной точки зрения 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)
Конечно, можно сделать это 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