angular - Angular 将 SSR 与加载路线相结合
问题描述
我通过这个问题的答案Angular 5 Build routes from API data at startup作为从后端加载路由的指南,然后我注意到我无法导航到那些我从 API 加载到 routerConfig 的路由。
我找到了原因,结果发现我的应用程序正在使用服务器站点渲染,所以我initialNavigation
设置为“启用”,这就是我的路由没有被注册的原因。Docs 说:“这个值是服务器端渲染工作所必需的。”
我需要从 API 加载路由的解决方案,同时保持 SSR,因为应用程序需要对 SEO 友好,是否有一个好的解决方案来做到这一点?因为我在谷歌上搜索了一段时间,在这种情况下找不到任何有用的东西。
解决方案
这是一个加载外部路由的示例服务。
@Injectable({
providedIn: 'root'
})
export class RouteConfigService {
constructor(
private categoryService: CategoryService,
private router: Router
) {
}
public loadRoutes(): Promise<any> {
var promise = this.categoryService.list().then(t => {
const config = this.router.config;
config.push({ path: '', component: HomeComponent, pathMatch: 'full' });
t.forEach(category => {
config.push({ path: category.url, component: CategoryComponent });
});
this.router.resetConfig(config);
});
return Promise.resolve(promise);
}
}
然后你的 app-routing.module.ts 应该是这样的:
@NgModule({
imports: [RouterModule.forRoot([])],
exports: [RouterModule],
providers: [
{
provide: APP_INITIALIZER,
useFactory: (routeConfigService: RouteConfigService) =>
() => routeConfigService.loadRoutes(),
deps: [RouteConfigService],
multi: true
}
],
})
export class AppRoutingModule { }
推荐阅读
- javascript - 如何在控制台日志中查看所选选项与其他选项的组合?
- android - 无法在弹出活动中编辑 EditText
- amazon-s3 - AWS-S3 orb - Circle CI - 意外参数:参数
- d3.js - 使用d3鼠标悬停时如何使路径始终填充绿色
- reactjs - 重定向在 Accounts.createUser() 中不起作用
- javascript - 如何在导航器中将不同的道具传递到不同的屏幕?
- reactjs - 在 webworker 中访问 axios 报错 ReferenceError: axios__WEBPACK_IMPORTED_MODULE_0___default is not defined
- javascript - Vuejs 获取组件 HTML 并通过 ajax POST 发送
- c# - XML 保留结构
- zooming - 在 OL 中锁定 WMTS 图块的缩放