首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器端渲染,angular 5和订阅。

服务器端渲染,angular 5和订阅。
EN

Stack Overflow用户
提问于 2018-10-05 00:36:45
回答 1查看 51关注 0票数 0

我正在尝试在angular 5应用程序上实现服务器端渲染。当应用程序构建并提供服务时,一切工作正常,但是页面的源代码没有正确呈现。我发现,如果我使用订阅和异步管道,这就解决了问题--我在屏幕上看到的东西也在源代码中。但是,如果我尝试通过管道传输订阅并使用返回值执行任何操作,则html会正确呈现,而源却不会。

这是它在typescript中正确工作时的实现方式:

代码语言:javascript
复制
ngOnInit() {
  this.httpResponse$ = this._dataService
   .send(new BrochureRequest(this._stateService.params.propertyId));
}

这是html

代码语言:javascript
复制
<div *ngIf="httpResponse$ | async as httpResponse; else loading">
  {{content goes here}}
</div>

在这种情况下,信息被显示在屏幕上,即html等待异步响应,并且至关重要的是,屏幕上的所有数据都反映在源中。

然而,在许多情况下,我会想要对从服务返回的数据执行一些操作- SEO,广告定位等。在这种情况下,我想做这样的事情

代码语言:javascript
复制
ngOnInit() {
    this.httpResponse$ = this._dataService
       .send(new BrochureRequest(this._stateService.params.propertyId)).pipe(
        tap((httpResponse) => {
            this.activeLink = 
            this._headerService.getActiveLink(this.httpResponse.Id);
            this._seoService.setSeoDetails(this.httpResponse.SeoDetails);
            // do more stuff
            return httpResponse;
        }));
  }

在这种情况下,信息将按预期显示在屏幕上,并调用所有其他函数,但是此组件中的任何内容都不会出现在源代码中。这就像html最初是在没有任何数据的情况下提供的,并且在填充数据时不会更新。

你知道为什么我没有把所有的数据都放在页面的源代码中吗?有没有办法可以延迟任何html渲染,直到返回httpResponse

EN

回答 1

Stack Overflow用户

发布于 2018-10-05 00:42:24

也许你可以使用像ngAfterViewChecked这样的事件?有关angular生命周期挂钩的更多信息,请单击此处https://angular.io/guide/lifecycle-hooks

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52651652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档