监听服务中数组内的对象属性更改

时间:2017-10-08 13:58:58

标签: javascript angular ionic-framework observable

所以基本上我想要实现的是watching/listening objects使用array和{{injectable servicesetters内的getters更改1}}操纵它的数据

例如

@Injectable()
export class StorageService {
    protected items: Array<any> = [];

    constructor(private storage: Storage) {
        this.storage.ready().then(() => {
            StorageService.getGetters().forEach((get) => {
                this.storage.get(get).then(res => this.items[get] = res);
            });
        });
    }

    public static getGetters(): string[] {
        return Object.keys(this.prototype).filter(name => {
            return typeof Object.getOwnPropertyDescriptor(this.prototype, name)["get"] === "function"
        });
    }

    get Storage() {
        return this.storage;
    };

    ClearStorage() {
        this.storage.clear();
    }

    protected Setter(key: string, value: any): void {
        this.items[key] = value;
        this.storage.set(key, value);
    }

    protected Getter(key: string): any {
        return this.items[key];
    }

    set User(value: User) {
        this.Setter('User', value);
    }

    get User(): User {
        return this.Getter('User');
    }

}

其中User interface是:

export interface User {
    id: number;
    role_id: number;
    name: string;
    email?: string;
}

现在在任何componentservice/provider我可以DI我的StorageService,因此我可以访问User getter

这样:

storage.User.name = 'testing';

现在name已更改,但我无法跟踪,因此我可以更新我的存储空间!

更新我的storage我会这样做:

    storage.User.name = 'testing';
    storage.User = storage.User;

哪个有效,但我需要一种方法来监听object properties发生的任何变化,这样我就可以更新我的存储...

我搜索了很多,我找到的只是watching components @Input(),这在我的情况下不起作用。

希望我明白我的观点。

0 个答案:

没有答案