angular - 在 ssr 构建中使用 ngOnInit 中的拦截器 - Angular 8
问题描述
我正在使用拦截器来添加 api 标头。我在 ngOnInit 函数中调用了一些 api。对于正常的 ng 服务,它运行良好。但是在 ssr 构建和服务中,没有调用 api 并且页面没有呈现但显示正在加载。如果我在 ngOnInit 中评论了 api 调用,它就可以工作。我怎么解决这个问题??请帮忙。
我的 component.ts 函数
ngOnInit() {
this.authController.fetchUser
.subscribe(
(params) => {
this.id = +params['id'];
this.user = this.authController.getUser(this.id)
}
);
}
fetchUser() 是一个使用拦截器的 api 调用函数。此功能在 ssr 构建中不起作用。
解决方案
根据这种情况,您似乎在 SSR 代码中使用了与客户端相关的内容,这就是您的 API 没有被调用并继续加载的原因。
在使用 SSR 时,保持 platformBrowser 检查代码始终是一种好方法,只需更改如下代码 -
constructor(private router: Router) { }
ngOnInit() {
if (isPlatformBrowser(this.platformId)) {
this.fetchData();
}
}
fetchData() {
this.authController.fetchUser
.subscribe((params) => {
this.id = +params['id'];
this.user = this.authController.getUser(this.id)
});
}
推荐阅读
- javascript - 将 JSON 对象数据打印到 HTML
- node.js - 找不到 Node.js 原生插件模块 (tfjs_binding.node)
- makefile - 将gPRC依赖添加到rocksdb并编译成rocksdb java
- java - 通过 Java API 创建 Google Cloud Function:“io.grpc.StatusRuntimeException: INVALID_ARGUMENT”
- facebook-graph-api - 我可以使用 facebook api 从不属于我的 facebook 页面中提取广告吗?
- javascript - 如何按特定顺序单击数组对象,这意味着一旦单击索引 0,然后允许单击索引 7
- python - JSON响应到数据库
- java - 递归循环后函数未正确结束
- google-cloud-dataflow - 将 PColll 行的一个字段写入 BQ - 需要整行用于表选择
- vue.js - Vue 和 Vuex v-for 在状态更改时无法正确更新