【问题标题】:How to separate JavaScript files in a Blazor project?如何在 Blazor 项目中分离 JavaScript 文件?
【发布时间】:2020-01-10 22:28:58
【问题描述】:

我有一个包含 10 多个模块的大项目,每个模块都有自己的 javascript 文件,我们一次只处理一个模块,我不需要整个 javascripts 内容,所以我应该全部加载还是如何加载我可以为每个模块分开它们吗? 为每个模块使用单独的 .cshtml 文件来托管 .razor 组件可能是一种解决方案,这是线索吗?

【问题讨论】:

  • 你好,我不知道“blazor”是什么意思,但忘了这一点,我想说你应该只使用标准的原生 es-modules 来加载你想要的任何东西,仅此而已 - 只需使用<script type="module" src="my-module.js"></script> 仅此而已 - 干杯
  • 谢谢,但在 blazor 中,您的代码会将所有脚本文件一起加载,我想将每个组件脚本文件分开并在每个组件加载时加载它们。
  • 祝你好运,希望在未来您可以迁移到具有您可以完全控制的简单静态前端的现代设置,并迁移到更灵活的微服务模型
  • 在微服务模型中,我不能共享静态文件夹(和布局),我应该分离 ui 层。因为每个服务都在不同的 Web 项目中。

标签: javascript blazor


【解决方案1】:

在 .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");
}

同样,JS 文件 component1.js 应该在 Blazor 项目之外进行管理。

第 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.
}

【讨论】:

  • 谢谢,但我想在组件加载事件中加载一组与组件相关的 JavaScript 文件。我不想加载所有脚本并将它们作为函数调用。我想加载所需的函数并在需要时调用它们。
  • 然后是我的第一个声明,我可以找到的 ASP.NET Core 存储库的最新链接不支持此功能。如果您设法加载Assembly,那么所有 Blazor 魔法都将起作用。所以从某种意义上说,我认为这种方式会更适合你。重要的一点是,组件不应该被主应用程序引用,那样它们最初不会被加载,它们应该被自动加载。
  • 你可以向开发团队提出这个建议。
  • 我在同一条船上。第 1 页上的 js 文件会引发错误,因为它需要第 2 页 .. smh .. 如果我想出一些技巧,我会报告回来
猜你喜欢
  • 2022-08-07
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多