angular - 为什么我的 Angular 应用程序(仅在移动设备上)出现空白屏幕?
问题描述
我最近使用 Angular 10 编写了一个应用程序。一切都运行良好,除了这个问题,只有网站的主页会在移动设备上加载(Chrome、Safari)。直接从搜索栏访问的任何其他 URL 都不会加载并导致空白屏幕,但是如果您先访问主页,然后导航到其他 URL,它们就可以正常工作。
我觉得这可能与路由器有关。我有模块被延迟加载app-routing.module.ts
,但我不知道这是否会导致此错误发生。
我也不太确定为此发布什么代码,但我只会包含我认为可能相关的内容。如果需要,我很乐意发布更多片段。
应用程序路由.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
const routes: Routes = [
{
path: '',
pathMatch: 'full',
loadChildren: () => import('@ui/modules/home/home.module').then(m => m.HomeModule)
},
{
path: 'admin',
loadChildren: () => import('@ui/modules/admin/admin.module').then(m => m.AdminModule)
},
{
path: 'blog',
loadChildren: () => import('@ui/modules/blog/blog.module').then(m => m.BlogModule)
},
{
path: 'portfolio',
loadChildren: () => import('@ui/modules/portfolio/portfolio.module').then(m => m.PortfolioModule)
},
{
path: '**',
redirectTo: '/'
}
];
@NgModule({
imports: [RouterModule.forRoot(routes, {
onSameUrlNavigation: 'reload',
scrollPositionRestoration: 'top'
})
],
exports: [RouterModule]
})
export class AppRoutingModule { }
app.module.ts (我有一些额外的东西用于降价库,可以忽略它)
import { NgModule } from '@angular/core';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpClient, HttpClientModule } from '@angular/common/http';
import { ServiceWorkerModule } from '@angular/service-worker';
import { MarkdownModule, MarkedOptions, MarkedRenderer } from 'ngx-markdown';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { environment } from '@ui/environments/environment';
import { CoreModule } from '@ui/core/core.module';
import { MaterialModule } from '@ui/modules/material/material.module';
export function markedOptionsFactory(): MarkedOptions {
const renderer = new MarkedRenderer();
const linkRenderer = renderer.link;
renderer.link = (href, title, text) => {
const html = linkRenderer.call(renderer, href, title, text);
return html.replace(/^<a /, '<a role="link" target="_blank" rel="nofollow noopener noreferrer" ');
}
return {
renderer,
gfm: true,
breaks: false,
pedantic: false,
smartLists: true,
smartypants: false,
};
}
@NgModule({
declarations: [AppComponent],
imports: [
AppRoutingModule,
BrowserAnimationsModule,
BrowserModule,
CoreModule,
FormsModule,
HttpClientModule,
MarkdownModule.forRoot({
loader: HttpClient,
markedOptions: {
provide: MarkedOptions,
useFactory: markedOptionsFactory
}
}),
MaterialModule,
ReactiveFormsModule,
ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production, registrationStrategy: 'registerImmediately' })
],
bootstrap: [AppComponent]
})
export class AppModule { }
main.ts
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.error(err));
谢谢您的帮助!
解决方案
嗨,您需要后备配置https://angular.io/guide/deployment#fallback-configuration-examples
当我在 Apache 中托管 Angular 应用程序时,我需要添加 .htaccess 文件,
<IfModule mod_rewrite.c>
RewriteEngine on
# Don't rewrite files or directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Rewrite everything else to index.html
# to allow html5 state links
RewriteRule ^ index.html [L]
</IfModule>
推荐阅读
- python - 如何创建不包含超过 5 分钟信息的文件?
- rabbitmq - amqp_basic_qos 没有任何效果
- rabbitmq - Rabbitmq ERROR CachingConnectionFactory:1302 - 通道关闭:通道错误;
- javascript - 用天数计算未来日期
- reactjs - “未捕获的 TypeError:超级表达式必须为 null 或函数” - 根据我的代码,为什么会出现此错误?
- android - Volley 请求在 android api 19 中不起作用
- c# - C#页面无法重新加载回上一页,datagridview数据丢失
- iis-express - 无法使用命令行 VSIISExeLauncher.exe 启动进程
- authentication - 解释当用户登录网站时会发生什么
- java - HeapSort 实现有 NullPointerException