2016-07-25 50 views
0

我的问题返回常量数据: 我想在一个单独的文件默认的数据,所以我可以把它重新设置为默认值,如果我想,但常数数据得到更新。Angular2修改从服务

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

流速:

  1. 数据在常量变量是那些获得出口


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

  • 服务返回该数据的无极。
  • 
    
        import { CONST_DATA } from './data.blank'; 
        @Injectable() 
        export class DataService { 
         getDefaultValue() { 
         return Promise.resolve(CONST_DATA) 
         } 
        } 
    
    
  • 设置服务在构造内的私人项。
  • 
    
        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???"); 
         }); 
         } 
        } 
    
    
  • 但仍然ngModel更新data.blank.ts(???)
  • 问题:为什么可以ngModel更新私人服务是得到从承诺返回非同步引用一个

    什么是错的,我怎么能解决这个问题。见plnk exemple here:对于完全跑步为例。

    回答

    0

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

    this.defaultData = data 
    

    解决方案: 改变你的服务来回报这个对象的克隆:

    export class DataService { 
        getDefaultValue() { 
    
        let data = Object.assign({}, CONST_DATA); // cloned data object 
        return Promise.resolve(data); 
    
        } 
    } 
    
    +0

    好了,是的,它的工作,但我觉得这更多的是补丁比“角度”的做法更好。 – MatMath

    +0

    这只是一个例子。只要你明白出了什么问题,你就可以相应地重构你的代码。在你的情形中,从服务到组件你一路/角被设置为同一个对象的新引用。 – Avi