如何使用 angular 通用在服务器端渲染中加载 json
How to load json in serverside rendering with angular universal
我正在为我的学士论文构建一个 angular2 通用应用程序。我想让这个应用程序在服务器上呈现 angular 通用。如何让我的 .json 文件加载到服务器上?在我没有服务器端渲染的版本中,我使用服务通过 http.get 请求获取 jsons,如下所示:
@Injectable()
export class VideoService {
private movieSubject: BehaviorSubject<Video[]> = new BehaviorSubject<Video[]>([]);
movies$: Observable<Video[]> = this.movieSubject.asObservable();
constructor(private http : Http) {
this.http.get('./json/movies/movies.json').subscribe(
res => this.movieSubject.next(res.json()),
error => console.error(error)
)
}
}
在我的组件中,我使用以下代码获得 json:
movieInfos: MovieInfos;
constructor(private movieService: MovieService) {
movieService.movies$.subscribe(
infos => this.movieInfos = infos,
error => console.error(error)
);
}
在模板中,我使用下面的代码将数据注入另一个组件:
<app-info-site *ngIf="movieInfos" [movieInfos]="movieInfos"></app-info-site>
当我将这段代码与 angular universal 一起使用时,它仍然有效,但是属于 json 的站点部分是第一次在客户端加载,因为 ngIf服务器忽略了这部分代码,所以我从服务器得到了一个不完整的 .html 文件。我怎样才能将其加载到服务器上以从那里获得完整的 .html 站点?
PS:我对 angular2 和服务器端渲染完全陌生。
首先,我建议您迁移到 Angular4,因为服务器端渲染现在是 Angular4 的一部分,因此不需要 Angular Universal...
您也可以结帐http://rajdeepdeb.me/angular-server-side-rendering-with-a-simple-node-server/
要在您现有的结构中回答,您应该通过从
实施 OnInit 将您的 http 调用从构造函数移动到 ngOnInit
import { OnInit } from '@angular/core';
export class YourComponent implements OnInit {
...other variable and functions...
ngOnInit() {
this.http.get('./json/movies/movies.json').subscribe(
res => this.movieSubject.next(res.json()),
error => console.error(error)
);
}
}
如果您需要任何其他支持,请告诉我...
我正在为我的学士论文构建一个 angular2 通用应用程序。我想让这个应用程序在服务器上呈现 angular 通用。如何让我的 .json 文件加载到服务器上?在我没有服务器端渲染的版本中,我使用服务通过 http.get 请求获取 jsons,如下所示:
@Injectable()
export class VideoService {
private movieSubject: BehaviorSubject<Video[]> = new BehaviorSubject<Video[]>([]);
movies$: Observable<Video[]> = this.movieSubject.asObservable();
constructor(private http : Http) {
this.http.get('./json/movies/movies.json').subscribe(
res => this.movieSubject.next(res.json()),
error => console.error(error)
)
}
}
在我的组件中,我使用以下代码获得 json:
movieInfos: MovieInfos;
constructor(private movieService: MovieService) {
movieService.movies$.subscribe(
infos => this.movieInfos = infos,
error => console.error(error)
);
}
在模板中,我使用下面的代码将数据注入另一个组件:
<app-info-site *ngIf="movieInfos" [movieInfos]="movieInfos"></app-info-site>
当我将这段代码与 angular universal 一起使用时,它仍然有效,但是属于 json 的站点部分是第一次在客户端加载,因为 ngIf服务器忽略了这部分代码,所以我从服务器得到了一个不完整的 .html 文件。我怎样才能将其加载到服务器上以从那里获得完整的 .html 站点?
PS:我对 angular2 和服务器端渲染完全陌生。
首先,我建议您迁移到 Angular4,因为服务器端渲染现在是 Angular4 的一部分,因此不需要 Angular Universal...
您也可以结帐http://rajdeepdeb.me/angular-server-side-rendering-with-a-simple-node-server/
要在您现有的结构中回答,您应该通过从
实施 OnInit 将您的 http 调用从构造函数移动到 ngOnInitimport { OnInit } from '@angular/core';
export class YourComponent implements OnInit {
...other variable and functions...
ngOnInit() {
this.http.get('./json/movies/movies.json').subscribe(
res => this.movieSubject.next(res.json()),
error => console.error(error)
);
}
}
如果您需要任何其他支持,请告诉我...