角延迟加载不适用于直接URL

Doc*_*nge 6 webpack angular

我正在运行.net Core + webpack 3 + Angular 4。

我的延迟加载在应用程序内部使用时效果很好,就像通过导航栏一样,但是当我尝试直接访问延迟加载的url时失败。

fail: Microsoft.AspNetCore.NodeServices[0]
      ERROR { Error: Uncaught (in promise): Error: Cannot find module './components/members/members.module.ngfactory'.
      Error: Cannot find module './components/members/members.module.ngfactory'.
          at /root/myApp/bin/Release/netcoreapp2.0/publish/ClientApp/dist/vendor.js:35933:9
          at ZoneDelegate.module.exports.ZoneDelegate.invoke (/root/myApp/bin/Release/netcoreapp2.0/publish/ClientApp/dist/vendor.js:92811:26)
          at Object.onInvoke (/root/myApp/bin/Release/netcoreapp2.0/publish/ClientApp/dist/vendor.js:14833:33)
          at ZoneDelegate.module.exports.ZoneDelegate.invoke (/root/myApp/bin/Release/netcoreapp2.0/publish/ClientApp/dist/vendor.js:92810:32)
          at Zone.module.exports.Zone.run (/root/myApp/bin/Release/netcoreapp2.0/publish/ClientApp/dist/vendor.js:92561:43)
          at /root/myApp/bin/Release/netcoreapp2.0/publish/ClientApp/dist/vendor.js:93238:57
          at ZoneDelegate.module.exports.ZoneDelegate.invokeTask (/root/myApp/bin/Release/netcoreapp2.0/publish/ClientApp/dist/vendor.js:92844:31)
          at Object.onInvokeTask (/root/myApp/bin/Release/netcoreapp2.0/publish/ClientApp/dist/vendor.js:14824:33)
          at ZoneDelegate.module.exports.ZoneDelegate.invokeTask (/root/myApp/bin/Release/netcoreapp2.0/publish/ClientApp/dist/vendor.js:92843:36)
          at Zone.module.exports.Zone.runTask (/root/myApp/bin/Release/netcoreapp2.0/publish/ClientApp/dist/vendor.js:92611:47)
Run Code Online (Sandbox Code Playgroud)

...是否有已知的解决此问题的方法或解决方法,所以我可以模仿路由器在应用程序内部的工作方式,并将请求“重定向”到延迟加载的模型

pix*_*its 1

使用Hash定位策略:

RouterModule.forRoot([...], { useHash });
Run Code Online (Sandbox Code Playgroud)

为什么这有效?

在大多数 Web 服务器(包括 IIS)中,哈希前面的部分被视为服务器上实际页面的路径。但该路由实际上只存在于客户端应用程序中。深层链接会先到达服务器,当然路由不存在,所以会出现 404 错误。使用 # 位置策略可以解决这个问题,因为服务器会忽略 # 之后的部分,因此从服务器的角度来看,它可以正确解析页面。Angular 会完成剩下的工作,将您带到正确的页面。

您需要告诉 Web 服务器可以深层链接到 SPA。这是一个看起来不错的指南: https ://gingter.org/2017/03/20/deep-link-angular-spa-iis/