我有一个大型项目,包含10多个模块,每个模块都有自己的javascript文件,我们一次只能处理一个模块,不需要全部javascript内容,因此我应该全部加载它们还是如何加载我可以为每个模块分开它们吗? 为每个模块使用单独的.cshtml文件托管.razor组件可能是一种解决方案,这是线索吗?
答案 0 :(得分:0)
在.NET Core 3.0上的初始发行版期间,Blazor本身不支持它 参见https://github.com/aspnet/AspNetCore/issues/5465
变体1
如果要动态地部分加载JS文件,则必须假定Blazor应用程序使用的JS不是Blazor应用程序本身的一部分,而是某些可以加载每个JS模块的外部环境。 Blazor组件必须自己手动加载JS模块。
// Include that file in the index.html, but not inside Razor Components Project.
function loadModule(moduleName) {
// load module somehow, via Ajax probably.
// This function likely has to make sure that module would not be loaded twice.
}
protected override Task OnInitializedAsync() {
// Component load JS module.
await jsRuntime.InvokeVoidAsync("loadModule", "component1");
}
同样,应在Blazor项目之外管理JS文件component1.js
。
版本2
使用Assembly.Load
加载组件装配,并以某种方式手动将组件注入UI。反思是您的朋友。
// Component1 assumed to be present in the `dist/_framework/_bin` folder where all Blazor stuff is located.
var assembly = Assembly.Load("Component1");
foreach (var type in assembly.GetTypes())
{
if (!type.FullName.EndsWith("ModuleLoader"))
return;
var moduleInstance = Activator.CreateInstance(type);
// And now all regular .NET plugin stuff.
}