UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

47 lines 4.7 kB
import { inject, Injectable, InjectionToken } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { publishRef } from '../utils/public-api'; import * as i0 from "@angular/core"; /** * 用于跨组件共享状态 * * 使用示例: * providers: [{ * provide: CONTEXT_INIT_VALUE_TOKEN, * useValue: LOG_TIMESTAMP_RANGES[1] * }, { * provide: ContextService, // 可以通过不同的token隔离状态或使用具有语意的token来提高可读性等 * useClass: ContextService, * }], * * 与业务无关,简单、纯粹,所以你可以在业务中实现多状态共享,例如 * this.contextService.set({ * ...this.contextService.get(), * step: 2 * }); */ export const CONTEXT_INIT_VALUE_TOKEN = new InjectionToken('CONTEXT_INIT_VALUE_TOKEN'); export class ContextService { constructor() { this.initValue = inject(CONTEXT_INIT_VALUE_TOKEN, { optional: true }); this.value$$ = new BehaviorSubject(this.initValue); this.value$ = this.value$$ .asObservable() .pipe(publishRef()); } set(value) { this.value$$.next(value); } get() { return this.value$$.getValue(); } reset() { this.set(this.initValue); } static { this.ɵfac = function ContextService_Factory(t) { return new (t || ContextService)(); }; } static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ContextService, factory: ContextService.ɵfac }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextService, [{ type: Injectable }], null, null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2NvcmUvc2VydmljZXMvY29udGV4dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFakQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUgsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQ3hELDBCQUEwQixDQUMzQixDQUFDO0FBR0YsTUFBTSxPQUFPLGNBQWM7SUFEM0I7UUFFVSxjQUFTLEdBQUcsTUFBTSxDQUFJLHdCQUF3QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0QsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV0RCxXQUFNLEdBQWtCLElBQUksQ0FBQyxPQUFPO2FBQzFDLFlBQVksRUFBRTthQUNkLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0tBYXZCO0lBWEMsR0FBRyxDQUFDLEtBQVM7UUFDWCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsR0FBRztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7K0VBbEJVLGNBQWM7dUVBQWQsY0FBYyxXQUFkLGNBQWM7O2lGQUFkLGNBQWM7Y0FEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBwdWJsaXNoUmVmIH0gZnJvbSAnLi4vdXRpbHMvcHVibGljLWFwaSc7XG5cbi8qKlxuICog55So5LqO6Leo57uE5Lu25YWx5Lqr54q25oCBXG4gKlxuICog5L2/55So56S65L6L77yaXG4gKiAgIHByb3ZpZGVyczogW3tcbiAqICAgICBwcm92aWRlOiBDT05URVhUX0lOSVRfVkFMVUVfVE9LRU4sXG4gKiAgICAgdXNlVmFsdWU6IExPR19USU1FU1RBTVBfUkFOR0VTWzFdXG4gKiAgIH0sIHtcbiAqICAgICBwcm92aWRlOiBDb250ZXh0U2VydmljZSwgLy8g5Y+v5Lul6YCa6L+H5LiN5ZCM55qEdG9rZW7pmpTnprvnirbmgIHmiJbkvb/nlKjlhbfmnInor63mhI/nmoR0b2tlbuadpeaPkOmrmOWPr+ivu+aAp+etiVxuICogICAgIHVzZUNsYXNzOiBDb250ZXh0U2VydmljZSxcbiAqICAgfV0sXG4gKlxuICog5LiO5Lia5Yqh5peg5YWz77yM566A5Y2V44CB57qv57K577yM5omA5Lul5L2g5Y+v5Lul5Zyo5Lia5Yqh5Lit5a6e546w5aSa54q25oCB5YWx5Lqr77yM5L6L5aaCXG4gKiAgICB0aGlzLmNvbnRleHRTZXJ2aWNlLnNldCh7XG4gKiAgICAgICAuLi50aGlzLmNvbnRleHRTZXJ2aWNlLmdldCgpLFxuICogICAgICAgc3RlcDogMlxuICogICAgIH0pO1xuICovXG5cbmV4cG9ydCBjb25zdCBDT05URVhUX0lOSVRfVkFMVUVfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW4oXG4gICdDT05URVhUX0lOSVRfVkFMVUVfVE9LRU4nLFxuKTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbnRleHRTZXJ2aWNlPFQ+IHtcbiAgcHJpdmF0ZSBpbml0VmFsdWUgPSBpbmplY3Q8VD4oQ09OVEVYVF9JTklUX1ZBTFVFX1RPS0VOLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHZhbHVlJCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuaW5pdFZhbHVlKTtcblxuICByZWFkb25seSB2YWx1ZSQ6IE9ic2VydmFibGU8VD4gPSB0aGlzLnZhbHVlJCRcbiAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAucGlwZShwdWJsaXNoUmVmKCkpO1xuXG4gIHNldCh2YWx1ZT86IFQpIHtcbiAgICB0aGlzLnZhbHVlJCQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUkJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5zZXQodGhpcy5pbml0VmFsdWUpO1xuICB9XG59XG4iXX0=