【问题标题】:Writing getters and setters in Typescript(Ionic2)在 Typescript(Ionic2) 中编写 getter 和 setter
【发布时间】:2016-08-05 21:49:38
【问题描述】:

在我的 ionic2 应用程序中,我需要存储用户信息,以便即使在用户关闭并重新打开应用程序后仍可用。因此,我为此使用 SqlStorage 服务。

但是代码又长又丑:

import { Injectable } from '@angular/core';
import {Storage, SqlStorage} from 'ionic-angular';

@Injectable()
export class Profile {
  private _storage: any;

  constructor(private _api: ApiEndpoint, private _uploadService: UploadService) {
    this._storage = new Storage(SqlStorage);
  }

  get firstname(): string {
    return this._storage.get('firstname');
  }

  set firstname(value: string) {
     this._storage.set('firstname', value);
  }

  get lastname(): string {
    return this._storage.get('lastname');
  }

  set lastname(value: string) {
    this._storage.set('lastname', value);
  }

  get username(): string {
    return this._storage.get('username');
  }

  set username(value: string) {
    this._storage.set('username', value);
  }

 ....
 ....
 .... and so on for every field

我的问题是,有没有更好的方法来编写这段代码?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    您可以使用装饰器在运行时生成 getter 和 setter。就类型系统而言,具有 getter 和 setter 的属性与普通属性是相同的。因此,在运行时声明它们不会违反类型系统。

    这是TypeScript Playground中的一个例子

    import { Injectable } from '@angular/core';
    import {Storage, SqlStorage} from 'ionic-angular';
    
    function Storage(target, propName: string) {
        Object.defineProperty(target, propName, {
            configurable: true,
            get: function() {
                return this._storage.get(propName);
            },
            set: function(v) {
                return this._storage.set(propName, v);
            }
        });
    }
    
    @Injectable()
    export class Profile {
        private _storage: any;
    
        constructor(private _api: ApiEndpoint, private _uploadService: UploadService) {
            this._storage = new Storage(SqlStorage);
        }
    
        @Storage
        firstname: string;
        @Storage
        lastname: string;
        @Storage
        username: string;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多