如何将 Blazor Wasm 应用程序放入 HTML 自定义元素中?
How to put a Blazor Wasm application into an HTML Custom Element?
我想在这里做一些炼金术:我有一个 Blazor Wasm 应用程序,我尝试(出于某些原因)封装到 HTML 自定义元素 .
到目前为止,我了解到脚本 _framework/blazor.webassembly.js
是应用程序的 bootstrap。
但是,如果我将该脚本放入我的 HTML 自定义元素 的影子根目录中,该脚本似乎已执行,到达断点,但与Blazor 应用程序发生:dotnet.wasm
未加载,没有消息,没有显示错误。
所以问题是:是否有人试图将 Blazor Wasm 应用程序封装到 HTML 自定义元素 中?可以的话怎么办?
编辑:
这是我目前得到的结果 DOM:
<html lang="en">
<head>
<!-- Usual things omitted -->
</head>
<body>
<my-custom-element>
#shadowRoot
<div id="app"></div>
<script src="_framework/blazor.webassembly.js" type="text/javascript"></script>
</my-custom-element>
<!-- The shadowRoot and its content is generated by the custom element declared in this script -->
<script src="importMyCustomElement.js" type="text/javascript"></script>
</body>
</html>
我也在调查这个。看来你不见了 <div id="app">
元素。请注意 id="app" 这是 Blazor 默认查找的内容(请参阅 Blazor Webassembly 应用程序的 Program.cs)。
有点晚了,但目前这是可能的。 Blazor 现在支持注册可以由 Javascript 实例化的组件。还有实验性支持将它们注册为自定义元素。
这是它最近的开发博客
https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-6-rc-1/#blazor-custom-elements
您可以通过安装预发布的 nuget 包开始
Microsoft.AspNetCore.Components.CustomElements
那么您可以这样做而不是添加根组件。
// WASM sample
builder.RootComponents.RegisterAsCustomElement<Counter>("my-blazor-counter");
// Server-side sample
builder.Services.AddServerSideBlazor(options =>
{
options.RootComponents.RegisterAsCustomElement<Counter>("my-blazor-counter");
});
在您的索引中添加以下脚本
<script src="_content/Microsoft.AspNetCore.Components.CustomElements/BlazorCustomElements.js"></script>
<script src="_framework/blazor.webassembly.js"></script>
有了它,您现在可以将这些组件用作自定义元素,它们既可以在另一个 SPA 框架中使用,也可以直接使用 html。
// Plain usage
<my-blazor-counter increment="1"></my-blazor-counter>
// React
let count = 1;
<my-blazor-counter increment={count}></my-blazor-counter>
这适用于服务器端和 webassembly。它也可以是一种使用服务器端 Blazor 创建实时 Web 组件(例如聊天框)而无需处理 SignalR 的巧妙方法。
我想在这里做一些炼金术:我有一个 Blazor Wasm 应用程序,我尝试(出于某些原因)封装到 HTML 自定义元素 .
到目前为止,我了解到脚本 _framework/blazor.webassembly.js
是应用程序的 bootstrap。
但是,如果我将该脚本放入我的 HTML 自定义元素 的影子根目录中,该脚本似乎已执行,到达断点,但与Blazor 应用程序发生:dotnet.wasm
未加载,没有消息,没有显示错误。
所以问题是:是否有人试图将 Blazor Wasm 应用程序封装到 HTML 自定义元素 中?可以的话怎么办?
编辑:
这是我目前得到的结果 DOM:
<html lang="en">
<head>
<!-- Usual things omitted -->
</head>
<body>
<my-custom-element>
#shadowRoot
<div id="app"></div>
<script src="_framework/blazor.webassembly.js" type="text/javascript"></script>
</my-custom-element>
<!-- The shadowRoot and its content is generated by the custom element declared in this script -->
<script src="importMyCustomElement.js" type="text/javascript"></script>
</body>
</html>
我也在调查这个。看来你不见了 <div id="app">
元素。请注意 id="app" 这是 Blazor 默认查找的内容(请参阅 Blazor Webassembly 应用程序的 Program.cs)。
有点晚了,但目前这是可能的。 Blazor 现在支持注册可以由 Javascript 实例化的组件。还有实验性支持将它们注册为自定义元素。
这是它最近的开发博客 https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-6-rc-1/#blazor-custom-elements
您可以通过安装预发布的 nuget 包开始
Microsoft.AspNetCore.Components.CustomElements
那么您可以这样做而不是添加根组件。
// WASM sample
builder.RootComponents.RegisterAsCustomElement<Counter>("my-blazor-counter");
// Server-side sample
builder.Services.AddServerSideBlazor(options =>
{
options.RootComponents.RegisterAsCustomElement<Counter>("my-blazor-counter");
});
在您的索引中添加以下脚本
<script src="_content/Microsoft.AspNetCore.Components.CustomElements/BlazorCustomElements.js"></script>
<script src="_framework/blazor.webassembly.js"></script>
有了它,您现在可以将这些组件用作自定义元素,它们既可以在另一个 SPA 框架中使用,也可以直接使用 html。
// Plain usage
<my-blazor-counter increment="1"></my-blazor-counter>
// React
let count = 1;
<my-blazor-counter increment={count}></my-blazor-counter>
这适用于服务器端和 webassembly。它也可以是一种使用服务器端 Blazor 创建实时 Web 组件(例如聊天框)而无需处理 SignalR 的巧妙方法。