gpt4 book ai didi

angular - 排除破坏 Angular Universal 的组件

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:38 25 4
gpt4 key购买 nike

我用了ng-toolkit使用 ng add @ng-toolkit/universal 为我的项目添加 Angular Universal 支持。

我能够毫无错误地创建产品版本,而且我能够再次毫无错误地运行服务器。当收到请求时它会“卡住”(nodeJS 不呈现任何输出)。

我发现,我的一个组件破坏了服务器端渲染。我发现问题出在 Mat-Carousel 上:

组件:

export class BannerComponent {

slides: any[] = [
// tslint:disable-next-line:max-line-length
{ image: 'assets/banner/banner-one.png' },
// tslint:disable-next-line:max-line-length
{ image: 'assets/banner/banner-two.png' },
// tslint:disable-next-line:max-line-length
{ image: 'assets/banner/banner-three.png' }
];

}

模板:

<section class="sec-space-b" id="banner">
<mat-carousel
timings="250ms ease-in"
[autoplay]="true"
interval="5000"
color="accent"
maxWidth="auto"
proportion="25"
slides="5"
[loop]="true"
[hideArrows]="false"
[hideIndicators]="false"
[useKeyboard]="true"
[useMouseWheel]="false"
orientation="ltr"
>
<mat-carousel-slide
#matCarouselSlide
*ngFor="let slide of slides; let i = index"
overlayColor="#00000000"
[image]="slide.image"
[hideOverlay]="false"
></mat-carousel-slide>
</mat-carousel>
</section>

我该如何解决这个问题?我能否以某种方式从服务器端构建中排除特定组件?

最佳答案

修复很简单,您应该使用 PLATFORM_ID token 与 isPlatformBrowserisPlatformServer 方法一起使用。

在您的模板中使用 #ngIf 语句:

<section class="sec-space-b" id="banner" *ngIf="isBrowser">

并在组件代码中将 isBrowser 字段初始化为:

import { isPlatformBrowser } from '@angular/common';
import { Component, OnInit, Inject, PLATFORM_ID } from '@angular/core';


@Component({
selector: 'app-home-banner',
templateUrl: './banner.component.html',
styleUrls: ['./banner.component.scss']
})
export class BannerComponent implements OnInit {

public isBrowser = isPlatformBrowser(this.platformId);

constructor(@Inject(PLATFORM_ID) private platformId: any) { }
}

您可以在本文中阅读有关 isPlatformServerisPlatformBrowser 的更多信息(它们在那里使用): https://www.twilio.com/blog/create-search-engine-friendly-internationalized-web-apps-angular-universal-ngx-translate

您还可以查看我关于 Angular Universal 的演讲(13:26 - 关于在浏览器和服务器上运行不同的代码): https://www.youtube.com/watch?v=J42mqpVsg0k

关于angular - 排除破坏 Angular Universal 的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55407541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com