我有一个Angular 6应用程序,其组件名为Assets。当我通过routerLinks导航到组件时,页面加载并按预期显示数据:
http://localhost:4200/assets/2
但是,如果我刷新页面,或者只是直接在浏览器中加载链接,那么很多脚本将无法加载:
GET http://localhost:4200/assets/runtime.js net::ERR_ABORTED 404 (Not Found)
Refused to execute script from '<URL>' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.
GET http://localhost:4200/assets/polyfills.js net::ERR_ABORTED 404 (Not Found)
我需要在路由器上做些什么还是什么原因?
答案 0 :(得分:2)
这是因为,默认情况下,Angular路由器使用PathLocationStrategy。
http://localhost:4200/assets/2。刷新浏览器时,需要重定向到主页(index.html),这应该在服务器端路由器重定向设置中进行处理。
您也可以尝试使用HashLocationStrategy,即它将添加带有“#”的路由器路径。 http://localhost:4200/#assets/2。如果您遵循此操作,则可以处理页面刷新。但是我们需要确保页面状态在所有模块(包括延迟加载的模块)中都可用。
答案 1 :(得分:2)
在路由模块中启用哈希位置。它应该看起来像以下内容。
const routes: Routes = [
{ path: '', component: MyComponent },
{ path: 'my-other', component: MyOtherComponent }
];
@NgModule({
exports: [ RouterModule ],
imports: [ RouterModule.forRoot(routes, {useHash: true}) ]
})
export class MyRoutingModule { }
之后,Angular将能够进行刷新。
答案 2 :(得分:0)
似乎是URL重写问题。如果您有iis服务器,则需要将web.config文件放入服务器中并添加用于URL重写的逻辑。您可以在angular.io
中找到它如果您使用的是Apache,则需要编写代码,然后添加[.htaccess] [2]
答案 3 :(得分:0)
当您更改了基本href值时,也会发生此问题
<base href="/"> to Something else
在index.html