【发布时间】:2017-08-22 16:18:00
【问题描述】:
我有一些 JavaScript 和 Angular 方面的经验,但我无法完全理解一些概念。 我正在尝试构建一个服务来存储一些设置,这些设置能够通知实现它的组件发生了更改。
为每个属性设置调用 onChange 函数的设置器似乎是老式的方法,我得到了它的工作。但我不觉得有角度的方式, 因为它使类膨胀,并且对于我要添加的每个属性,我都需要实现新的 get & set 方法。 所以我想要一个接口,每次将属性设置为新的东西时调用 onChange 函数。但我找不到这个的语法。
import { Injectable} from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class serviceSettings {
private constructed: boolean = false;
private _targetFPS: number = 30;
private _showFPS: boolean = true;
private _viewDistance: number = 7000;
private _enabelAntialiasing: boolean = true;
private settingsChanged = new Subject();
constructor() {
if (this.constructed) {
console.log('serviceSettings aready exists');
return this
}
this.constructed = true;
}
onChange() {
this.settingsChanged.next();
//save setting in local storage
//send them to a api to store them server sided
console.log('settings changed');
}
onChangeNotice():Observable<any> {
return this.settingsChanged.asObservable();
}
set targetFPS(val:number) {
this._targetFPS = val
this.onChange()
}
get targetFPS():number{
return this._targetFPS
}
set showFPS(val:boolean) {
this._showFPS = val
this.onChange()
}
get showFPS():boolean {
return this._showFPS
}
set enabelAntialiasing(val:boolean) {
this._enabelAntialiasing = val
this.onChange()
}
get enabelAntialiasing():boolean {
return this._enabelAntialiasing
}
set viewDistance(val:number) {
this._viewDistance = val
this.onChange()
}
get viewDistance():number{
return this._viewDistance
}
}
在这个特定的上下文中,它是我正在使用 THREE.js 开发的一个小游戏“引擎”的设置服务。如果我想启用/禁用抗锯齿,但如果任何其他设置已更改,则需要恢复渲染器。
TL:DR:我必须根据发生的变化对变化做出不同的反应。
【问题讨论】:
标签: angular typescript service interface getter-setter