我正在运行.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)
...是否有已知的解决此问题的方法或解决方法,所以我可以模仿路由器在应用程序内部的工作方式,并将请求“重定向”到延迟加载的模型
使用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/
| 归档时间: |
|
| 查看次数: |
775 次 |
| 最近记录: |