Я пытаюсь использовать Observable впервые, и я полностью сбит с толку.Есть так много маленьких примеров, и каждый делает по-своему.В двух словах, вот что я пытаюсь сделать: у меня есть компонент настроек, который позволяет пользователю изменять настройки, используемые в приложении.Использование локального хранилища, чтобы сохранить их, и я могу изменить их, сохранить их, прочитать при запуске и т. Д. Настройки работают отлично.Но теперь я хочу иметь возможность узнать, когда эти настройки изменились в режиме реального времени, чтобы я мог изменить некоторые DOM (например, названия) на основе новых настроек.Прямо сейчас я пытаюсь реализовать наблюдаемое из моей службы настроек обратно на app.component (где отображается заголовок), чтобы я мог обновить заголовок, как только он изменился.Но я даже не могу понять твой синтаксис правильно.Вот код settings.service:
import { Input } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import { AppSettings } from '../shared/app-settings';
import { APPSETTINGS } from "../shared/defaultSettings";
import { Inject, Injectable } from '@angular/core';
import { LOCAL_STORAGE, StorageService } from 'angular-webstorage-service';
import { LogService } from 'src/app/services/app-log.service';
@Injectable()
export class AppSettingsService {
@Input()
defaultSettings = APPSETTINGS;
settings: Observable<AppSettings>;
newSettings: AppSettings;
constructor( private logger: LogService,
@Inject(LOCAL_STORAGE) private storage: StorageService) {
this.settings = this.storage.get('TRACS3_SETTINGS');
if ( this.settings === null ) {
this.storage.set('TRACS3_SETTINGS', this.defaultSettings);
this.settings = this.storage.get('TRACS3_SETTINGS');
}
}
public getSettings(): any {
//return this.storage.get('TRACS3_SETTINGS');
//return this.storage.get('TRACS3_SETTINGS').asObservable();
let settingsObservable = new Observable(observer => {
return this.storage.get('TRACS3_SETTINGS');
})
}
public saveSettings(settings: AppSettings): void{
this.newSettings = settings;
this.storage.set('TRACS3_SETTINGS', settings);
}
}
и компонента:
import { Component, OnInit } from '@angular/core';
import { MatIconRegistry } from "@angular/material/icon";
import { DomSanitizer } from "@angular/platform-browser";
import { Inject } from '@angular/core';
import { Observable } from 'rxjs';
import { AdalService } from 'adal-angular4';
import { environment } from '../environments/environment';
import { AppSettings } from './shared/app-settings'
import { AppSettingsService } from './services/app-settings.service';
import { APPSETTINGS } from './shared/defaultSettings';
import { LogService } from 'src/app/services/app-log.service';
import {LOCAL_STORAGE, WebStorageService} from 'angular-webstorage-service';
import { Aircraft } from "./shared/aircraft";
import { Content } from '@angular/compiler/src/render3/r3_ast';
import {TitleService } from './services/title.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit{
className: string;
aircraft: Aircraft[];
isAuthenticated$: Observable<boolean>;
settings: AppSettings;
defaultSettings: AppSettings;
constructor(
private titleService: TitleService,
private appSettingsService: AppSettingsService,
private matIconRegistry: MatIconRegistry,
private domSanitizer: DomSanitizer,
private adalService: AdalService,
private logger: LogService,
private _wing: Observable<string>,
@Inject(LOCAL_STORAGE) private storage: WebStorageService
){
this.settings = this.appSettingsService.getSettings();
adalService.init(environment.config);
this.appSettingsService.getSettings().subscribe(newSettings => this.settings = newSettings);
}
ngOnInit(){
this.className = this.constructor.toString().match(/\w+/g)[1];
this.adalService.handleWindowCallback();
this.logger.debug(this.className, "adal userInfo: ", this.adalService.userInfo);
this.settings = this.appSettingsService.getSettings();
this.logger.log(this.className, "Settings at startup: ", this.settings);
if (this.settings.wing == null )
this.settings = this.defaultSettings;
_wing = this.settings.wing;
}
login() {
this.adalService.login();
}
logout() {
this.adalService.logOut();
}
get authenticated(): boolean {
return this.adalService.userInfo.authenticated;
}
}
Весь проект запущен на github на https://github.com/cpeddie/TRACS3.git
У кого-нибудь естьпростой пример использования наблюдаемой?
Спасибо ....