ASP.NET核心Angular模板:app.module.client与app.module.server

问题描述:

如他们的文章“Building Single Page Applications on ASP.NET Core with JavaScriptServices”中所述,Microsoft为在ASP.NET Core中开发Angular(不是AngularJS)提供了一个梦幻般的模板。ASP.NET核心Angular模板:app.module.client与app.module.server

虽然它非常简单,但有一部分模板引起了我的警惕:而不是简单地存在app.module.ts文件,同时存在app.module.client.tsapp.module.server.ts

screenshot of <code>app.module.client.ts</code> and <code>app.module.server.ts</code>

我没能找到任何解释这种在网络上。有没有人有任何想法为什么有这两个单独的文件的应用程序模块,他们的具体用途是什么,如何使用它们等?

如果有帮助可言,这里是完整的模板是什么样子:

full ASP.NET Core Angular template

我要指出,ClientApp/app/modelsClientApp/app/services是我加为我自己的目的的两个文件夹;他们不是模板的一部分。另外,app.module.shared.ts实际上是非常直接的,只是防止不得不编写一些代码两次,所以不要担心。

下面是这两个文件是什么样子:

<code>app.module.client.ts</code> and <code>app.module.server.ts</code> code side-by-side

让我作序,我不是100%的这句话的准确性开始,但因为没有其他人似乎已经回答了,我会给它一个镜头。

Microsoft SPA与Angular 2利用Angular Universal进行AOT渲染。现在它已经升级为使用Angular 4,它不使用Angular Universal。我的想法是将app.module.ts分解为客户端和服务器文件,以帮助进行AOT渲染。

app.module.shared.ts文件实际上只是app.module.client.ts和app.module.server.ts使用的全局常量。因为它在发布期间都被渲染成几个js文件,所以它们分开app.module文件并不重要。

+2

啊,好的。用法怎么样?例如,当你声明一个组件时,它应该放在客户端,服务器还是共享?那么提供者呢?进口?一个好的经验法则是将所有东西都分享出去吗?有没有这样一种情况,应该在某个文件中专门放置某些文件而不是另一个文件? – NetherGranite

+1

我发现如果我尝试添加对组件要使用的服务的引用,则必须在app.module.server和app.module.client中将这些引用添加到提供程序中。我试图按照https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2017-Launch/WEB-103(请参阅我的评论底部),并且必须添加对示例服务的引用上述文件。 – danfer

+1

我最终做的是在app.module.shared.ts中设置服务的导入并将其添加到共享的提供程序中,而不是在app.module.server和app.module.client中添加对sharedConfig.providers的引用每个服务器和客户端文件的@NMModule的提供者部分。这样,如果需要添加新的服务,每个文件都没有做,只是在共享。测试了2种不同的服务并且工作正常 – danfer