АЧ
Size: a a a
АЧ
MF
this.translocoService.setActiveLang(language);- не это ли переводит языки с одного на другой?
S
DT
S
AP
ERROR in src/app/private/private.module.ts(26,9): Error during template compile of 'PrivateModule'
Function calls are not supported in decorators but 'CustomizationOptions' was called.
src/app/private/private.module.ts(26,9): Error during template compile of 'PrivateModule'
Function calls are not supported in decorators but 'CustomizationOptions' was called.
javascript
import { InjectionToken, ModuleWithProviders, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { PrivateRoutingModule } from './private-routing.module';
import { HomeComponent } from './home.component';
import { NgZorroAntdModule } from 'ng-zorro-antd';
import { FormsModule } from '@angular/forms';
import { SharedModule } from '@app/shared/shared.module';
import { SegmentsModule } from '@private/segments/segments.module';
import { CustomizationModule } from '@private/customization/customization.module';
import { environment } from '@environments/environment';
import { CustomizationOptions } from '@private/customization/options/customization-options';
@NgModule({
declarations: [
HomeComponent,
],
imports: [
CommonModule,
PrivateRoutingModule,
NgZorroAntdModule,
FormsModule,
SharedModule,
SegmentsModule,
CustomizationModule.forRoot(environment.customizationOptions ?
new CustomizationOptions(environment.customizationOptions) : new CustomizationOptions())
]
})
export class PrivateModule {
}
javascript
@NgModule({
declarations: [CustomizableHeaderComponent, CustomizableFooterComponent],
exports: [
CustomizableHeaderComponent,
CustomizableFooterComponent
],
imports: [
CommonModule,
SharedModule,
NzLayoutModule
]
})
export class CustomizationModule {
static forRoot(options) : ModuleWithProviders {
return {
ngModule: CustomizationModule,
providers: [
{ provide: CustomizationOptionsToken, useValue: options, multi: true }
]
};
}
}
AP
ZS
Вキ
// Возвращает только публичные свойства и методы
type WrapInterface<T> = { [P in keyof T]: T[P] };
// Имплементируем абстрактный класс, который будем использовать и реализовывать. Это отвязывает полностью нас от реализации сервиса из библиотеки, и мы совершенно не зависим от его реализации. Ниже это будет видно по тому, что мы сервис получаем из библиотеки.
abstract class BaseLocaleService implements WrapInterface<BsLocaleService> {
abstract get locale(): BehaviorSubject<string>;
abstract get localeChange(): Observable<string>;
abstract get currentLocale(): string;
abstract use(locale: string): void;
}
// Cобственная реализация, которая будет делать то, что нам надо. При этом реализуя абстракцию и получая сервис через DI она никак не зависит от реализации внешнего сервиса. А значит, если реализация изменится, то у нас ничего не сломается.
@Injectable()
class MyLocaleService extends BaseLocaleService {
constructor(private ls: BaseLocaleService) {
super();
// Ниже этой строки в конструкторе имплементируем логику для установки локали, которая нужна:
// if (isPlatformBrowser(...))
// { ... }
}
// Ниже реализуем абстракцию, делегируя вызовы другому сервису
get locale(): BehaviorSubject<string> {
return this.ls.locale;
}
get localeChange(): Observable<string> {
return this.ls.localeChange;
}
get currentLocale(): string {
return this.ls.currentLocale;
}
use(locale: string): void {
return this.ls.use(locale);
}
}
// и в модуле
providers: [
// провайдим базовый класс, и по-умолчанию в нем будет класс из библиотеки
{ provide: BaseLocaleService, useClass: BsLocaleService },
// провайдим собственный класс
{ provide: BsLocaleService, useClass: MyLocaleService }
]
S
// Возвращает только публичные свойства и методы
type WrapInterface<T> = { [P in keyof T]: T[P] };
// Имплементируем абстрактный класс, который будем использовать и реализовывать. Это отвязывает полностью нас от реализации сервиса из библиотеки, и мы совершенно не зависим от его реализации. Ниже это будет видно по тому, что мы сервис получаем из библиотеки.
abstract class BaseLocaleService implements WrapInterface<BsLocaleService> {
abstract get locale(): BehaviorSubject<string>;
abstract get localeChange(): Observable<string>;
abstract get currentLocale(): string;
abstract use(locale: string): void;
}
// Cобственная реализация, которая будет делать то, что нам надо. При этом реализуя абстракцию и получая сервис через DI она никак не зависит от реализации внешнего сервиса. А значит, если реализация изменится, то у нас ничего не сломается.
@Injectable()
class MyLocaleService extends BaseLocaleService {
constructor(private ls: BaseLocaleService) {
super();
// Ниже этой строки в конструкторе имплементируем логику для установки локали, которая нужна:
// if (isPlatformBrowser(...))
// { ... }
}
// Ниже реализуем абстракцию, делегируя вызовы другому сервису
get locale(): BehaviorSubject<string> {
return this.ls.locale;
}
get localeChange(): Observable<string> {
return this.ls.localeChange;
}
get currentLocale(): string {
return this.ls.currentLocale;
}
use(locale: string): void {
return this.ls.use(locale);
}
}
// и в модуле
providers: [
// провайдим базовый класс, и по-умолчанию в нем будет класс из библиотеки
{ provide: BaseLocaleService, useClass: BsLocaleService },
// провайдим собственный класс
{ provide: BsLocaleService, useClass: MyLocaleService }
]
S
АЧ
// Возвращает только публичные свойства и методы
type WrapInterface<T> = { [P in keyof T]: T[P] };
// Имплементируем абстрактный класс, который будем использовать и реализовывать. Это отвязывает полностью нас от реализации сервиса из библиотеки, и мы совершенно не зависим от его реализации. Ниже это будет видно по тому, что мы сервис получаем из библиотеки.
abstract class BaseLocaleService implements WrapInterface<BsLocaleService> {
abstract get locale(): BehaviorSubject<string>;
abstract get localeChange(): Observable<string>;
abstract get currentLocale(): string;
abstract use(locale: string): void;
}
// Cобственная реализация, которая будет делать то, что нам надо. При этом реализуя абстракцию и получая сервис через DI она никак не зависит от реализации внешнего сервиса. А значит, если реализация изменится, то у нас ничего не сломается.
@Injectable()
class MyLocaleService extends BaseLocaleService {
constructor(private ls: BaseLocaleService) {
super();
// Ниже этой строки в конструкторе имплементируем логику для установки локали, которая нужна:
// if (isPlatformBrowser(...))
// { ... }
}
// Ниже реализуем абстракцию, делегируя вызовы другому сервису
get locale(): BehaviorSubject<string> {
return this.ls.locale;
}
get localeChange(): Observable<string> {
return this.ls.localeChange;
}
get currentLocale(): string {
return this.ls.currentLocale;
}
use(locale: string): void {
return this.ls.use(locale);
}
}
// и в модуле
providers: [
// провайдим базовый класс, и по-умолчанию в нем будет класс из библиотеки
{ provide: BaseLocaleService, useClass: BsLocaleService },
// провайдим собственный класс
{ provide: BsLocaleService, useClass: MyLocaleService }
]
S
S
S
YK
S
YK
nt
SK