【问题标题】:Where should I put my ressources when doing an app with angular + .net Core使用 angular + .net Core 做应用程序时,我应该把资源放在哪里
【发布时间】:2018-05-31 16:42:20
【问题描述】:

我正在体验 Asp.Net Core + Angular,我已经建立了一个项目(通过dotnet new angular)并开始应用我的管理主题。

目前我已将所有主题资源直接放在 wwwroot/dist 文件夹中:

我遇到了一个问题:

在我的 app.component.html 中,我使用了一种资源(一个徽标):

<img src="dist/img/logo.png" alt="J4N Logo" class="brand-icon">

然后我从 angular 得到一个错误:

处理请求时发生未处理的异常。 NodeInvocationException:由于错误,预渲染失败:错误: 找不到模块“./dist/img/logo.png”

我知道这是因为 Angular 尝试自行加载它并认为这可能是某种控制器。问题是,这种 logo/css/... 甚至可以在 Angular 应用程序启动之前使用(例如在加载页面中),所以我不能把它放在 Angular 应用程序文件夹中。

那么最好的做法是什么,我应该把这种文件放在哪里,我应该如何告诉 Angular 去别处?+

【问题讨论】:

  • 你可以试试~/dist/img/logo.png
  • @George,试过了,但它给出了完全相同的错误信息

标签: javascript css angularjs angular .net-core


【解决方案1】:

把它放在你的 wwwroot 文件夹中。您的 dist 文件夹将在编译时被替换,而 wwwroot 文件夹相当于 IIS wwwroot 文件夹。如果你这样说:

wwwroot/
       www.example.com // your website, aka dist folder
       assets/
             img/
                01.png
                02.png

那么您的01.png 的网址将是www.example.com/assets/img/01.png

[编辑]:只想添加。在你的情况下,让你的 img out dist 文件夹并将其放入 wwwroot。那么您的 src 将是 <img src="/img/logo.png" alt="J4N Logo" class="brand-icon">

【讨论】:

  • 我将资源直接移动到wwwroot 文件夹中,并按照您的建议更改了网址,但现在我明白了:NodeInvocationException: Prerendering failed because of error: Error: Cannot find module "./img/logo.png"
  • 对不起,你可以试试<img src="/img/logo.png" alt="J4N Logo" class="brand-icon">
  • 你也在使用静态文件中间件吗?
  • 我试过了,但同样的错误。我真的觉得我应该在 Angular 上配置一些东西让他知道这是一种资产。
  • @JamieTaylor 真的很抱歉,但我不知道什么是静态文件中间件。我刚刚使用 dotnet new angular 创建了一个站点并开始添加主题,仅此而已。
【解决方案2】:

您应该创建一个名为“assets”的资产文件夹,例如在 ClientApp 文件夹下,并将您的资源放在这里。

【讨论】:

  • 但这会阻止在角度应用程序之外使用它(例如,从角度页面的加载页面。
猜你喜欢
  • 2014-01-30
  • 2020-09-30
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多