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

时间:2016-07-25 18:19:51

标签: angular es6-promise

我的问题: 我想在一个单独的文件中有一个默认数据,所以我可以调用它来重置默认值,如果我想,但Const数据得到更新。

我可以在构造函数中直接硬编码值,但这会阻止我在不同模块中使用相同的“空白状态”。

流程:

  1. 导出的 const 变量中的数据
  2. 
    
        export const CONST_DATA: ConstDataStructure {
          item1: 'Basic String 1',
          item2: 'Basic String 2'
          item3: 'Basic String 3'
        }
    
    
    1. 返回该数据承诺的服务。
    2. 
      
          import { CONST_DATA } from './data.blank';
          @Injectable()
          export class DataService {
            getDefaultValue() {
              return Promise.resolve(CONST_DATA)
            }
          }
      
      
      1. 在构造函数内的私有项目中设置服务。
      2. 
        
            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(???)
        2. 问题:为什么ngModel可以更新私有服务,该私有服务从引用常量的承诺返回异步

          有什么问题,如何解决这个问题。请参阅plnk exemple here:完整运行示例。

1 个答案:

答案 0 :(得分:0)

... Intresting 我想问题是你的服务(就像一个单身人士)会返回一个已解决的承诺。这个承诺引用了每个单独调用的同一个对象。您的组件对该对象具有相同的引用:

this.defaultData = data

溶液: 更改您的服务以返回此对象的克隆:

export class DataService {
  getDefaultValue() {

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

  }
}