Angular2 修改服务返回的常量数据

Angular2 modify constant data returned from service

我的问题: 我想在一个单独的文件中有一个默认数据,这样我就可以调用它来重置默认值,但是 Const 数据会更新。

我可以直接在构造函数中对值进行硬编码,但这会阻止我在不同模块中使用相同的 "Blank State"。

流量:

  1. 导出的 const 变量中的数据


    export const CONST_DATA: ConstDataStructure {
      item1: 'Basic String 1',
      item2: 'Basic String 2'
      item3: 'Basic String 3'
    }

  1. Return 数据承诺的服务。


    import { CONST_DATA } from './data.blank';
    @Injectable()
    export class DataService {
      getDefaultValue() {
        return Promise.resolve(CONST_DATA)
      }
    }

  1. 在构造函数中的 Private 项中设置服务。


    export class App implements OnInit {
      defaultData: ConstDataStructure;
      constructor(private dataService: DataService) {}

      ngOnInit() {
        this.resetDefaultData();
      }
      resetDefaultData() {
        this.dataService.getDefaultValue().then(data => {
          this.defaultData = data;
          console.log("Return of the Promeses should have been resseting my data to the default???");
        });
      } 
    }

  1. 但是 ngModel 仍然更新 data.blank.ts (???)

问题:为什么 ngModel 可以更新从 获取 return 异步的 Private 服务 promise 引用了一个 Constant

出了什么问题,我该如何解决。请参见 plnk exemple here:完整的 运行 示例。

有趣... 我想问题是您的服务(就像一个单身人士),return 是一个已解决的承诺。这个 promise 在每次调用时都引用同一个对象,这也是一个单例。您的组件对该对象具有相同的引用:

this.defaultData = data

解决方法: 将您的服务更改为 return 此对象的克隆:

export class DataService {
  getDefaultValue() {

    let data = Object.assign({}, CONST_DATA); // cloned data object
    return Promise.resolve(data);

  }
}