Я использую Angular Universal.Я создал PlatformService
, чтобы определить, на какой платформе я сейчас работаю.
/* platform.service.js */
import { Injectable, Inject, PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser, isPlatformServer } from '@angular/common';
@Injectable({
providedIn: 'root'
})
export class PlatformService {
constructor(
@Inject(PLATFORM_ID) private platformId: Object
) {
this.platformId; // this is coming out undefined
}
isBrowser() {
return isPlatformBrowser(this.platformId);
}
isServer() {
return isPlatformServer(this.platformId);
}
}
Я создаю BaseComponent
для обычной обработки моих компонентов, связанных с маршрутами.
/* base.component.ts */
import { Component, OnInit, Inject } from '@angular/core';
import { InjectorHolderService } from '@core/services/util/injector-holder.service';
import { PlatformService } from '@core/services/util/platform.service';
@Component({
selector: 'app-base',
template: '',
})
export class BaseComponent implements OnInit {
protected platformService: PlatformService;
constructor() {
this.platformService = InjectorHolderService.injector.get(PlatformService);
console.log(this.platformService);
}
}
Поскольку этот компонент будет наследоваться многими компонентами, я не хотел передавать PlatformService
через super()
.Поэтому я решил пойти на создание Injector
.
/* app.module.ts */
import { InjectorHolderService } from '@core/services/util/injector-holder.service';
import { PlatformService } from '@core/services/util/platform.service';
@NgModule({ ... })
export class AppModule {
constructor() {
InjectorHolderService.injector = Injector.create({
providers: [
{
provide: PlatformService,
useClass: PlatformService,
deps: [], // I think i need to put something here, but not sure.
}
]
});
}
}
И службы, которая может содержать весь введенный модуль для будущего использования.
/* injector-holder.service.ts */
import { Injectable, Injector } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class InjectorHolderService {
static injector: Injector;
}
Но @Inject(PLATFORM_ID) private platformId: Object
даетout undefined
, из-за которого я не могу обнаружить платформу.
Что мне здесь не хватает?или Если есть лучший подход для достижения вышеуказанной функциональности.
Пожалуйста, дайте мне знать, если вам, ребята, нужно посмотреть какой-либо другой файл.