SAP Spartacus ConfigurationService
生活随笔
收集整理的這篇文章主要介紹了
SAP Spartacus ConfigurationService
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
位于文件configuration.service.ts內(nèi):
import { Inject, Injectable, OnDestroy } from '@angular/core'; import { BehaviorSubject, Observable, Subscription, zip } from 'rxjs'; import { deepMerge } from '../utils/deep-merge'; import { isFeatureEnabled } from '../../features-config'; import {Config,ConfigChunk,DefaultConfig,DefaultConfigChunk,RootConfig, } from '../config-tokens'; import { UnifiedInjector } from '../../lazy-loading/unified-injector'; import { skip, tap } from 'rxjs/operators';@Injectable({providedIn: 'root', }) export class ConfigurationService implements OnDestroy {/*** Will emit unified configuration when some ambient configuration will appear** Ambient configuration can appear when we lazy load module with configuration*/readonly unifiedConfig$: Observable<any>;/*** Global application configuration*/readonly config: any;private readonly ambientDefaultConfig: any = {};private readonly ambientConfig: any = {};private subscription: Subscription;constructor(@Inject(RootConfig) protected rootConfig: any,@Inject(DefaultConfig) protected defaultConfig: any,protected unifiedInjector: UnifiedInjector,@Inject(Config) config: any) {this.config = config;this.unifiedConfig$ = new BehaviorSubject(config);// We need to use subscription to propagate changes to the config from the beginning.// It will be possible to make it lazy, when we drop this compatibility feature// in the future.this.subscription = this.feedUnifiedConfig().subscribe();}private feedUnifiedConfig(): Observable<any> {const configChunks$: Observable<object[]> = this.unifiedInjector.get(ConfigChunk,[]);const defaultConfigChunks$ = this.unifiedInjector.get(DefaultConfigChunk,[]);return zip(configChunks$, defaultConfigChunks$).pipe(// we don't need result from the root injectorskip(1),tap(([configChunks, defaultConfigChunks]) =>this.processConfig(configChunks, defaultConfigChunks)));}private processConfig(configChunks: any[], defaultConfigChunks: any[]) {if (defaultConfigChunks?.length) {deepMerge(this.ambientDefaultConfig, ...defaultConfigChunks);}if (configChunks.length) {deepMerge(this.ambientConfig, ...configChunks);}if (configChunks.length || defaultConfigChunks.length) {this.emitUnifiedConfig();}}private emitUnifiedConfig(): void {const newConfig = deepMerge({},this.defaultConfig,this.ambientDefaultConfig,this.ambientConfig,this.rootConfig);(this.unifiedConfig$ as BehaviorSubject<any>).next(newConfig);// compatibility mechanism, can be disabled with feature toggleif (!isFeatureEnabled(this.config, 'disableConfigUpdates')) {deepMerge(this.config, newConfig);}}ngOnDestroy(): void {if (this.subscription) {this.subscription.unsubscribe();}(this.unifiedConfig$ as BehaviorSubject<any>).complete();} }Service實(shí)現(xiàn)類上的@Injectable注解:@injectable 一般用在Angular的Service中,表明該Service實(shí)例可以注入到其他的service、component或者其他實(shí)例里面。換言之,其他的實(shí)例要依賴被該@Injectable修飾的類。
通過注入的config對(duì)象,能查看到SAP Spartacus所有全局的配置信息:
比如occ endpoint:
base site:
所有界面使用到的圖標(biāo):
要獲取更多Jerry的原創(chuàng)文章,請(qǐng)關(guān)注公眾號(hào)"汪子熙":
總結(jié)
以上是生活随笔為你收集整理的SAP Spartacus ConfigurationService的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于FastStone Capture
- 下一篇: 富士向 X-H2 / X-T5 / X-