Angular2 修改服务返回的常量数据
Angular2 modify constant data returned from service
我的问题:
我想在一个单独的文件中有一个默认数据,这样我就可以调用它来重置默认值,但是 Const 数据会更新。
我可以直接在构造函数中对值进行硬编码,但这会阻止我在不同模块中使用相同的 "Blank State"。
流量:
- 导出的 const 变量中的数据
export const CONST_DATA: ConstDataStructure {
item1: 'Basic String 1',
item2: 'Basic String 2'
item3: 'Basic String 3'
}
- Return 数据承诺的服务。
import { CONST_DATA } from './data.blank';
@Injectable()
export class DataService {
getDefaultValue() {
return Promise.resolve(CONST_DATA)
}
}
- 在构造函数中的 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???");
});
}
}
- 但是 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);
}
}
我的问题: 我想在一个单独的文件中有一个默认数据,这样我就可以调用它来重置默认值,但是 Const 数据会更新。
我可以直接在构造函数中对值进行硬编码,但这会阻止我在不同模块中使用相同的 "Blank State"。
流量:
- 导出的 const 变量中的数据
export const CONST_DATA: ConstDataStructure {
item1: 'Basic String 1',
item2: 'Basic String 2'
item3: 'Basic String 3'
}
- Return 数据承诺的服务。
import { CONST_DATA } from './data.blank';
@Injectable()
export class DataService {
getDefaultValue() {
return Promise.resolve(CONST_DATA)
}
}
- 在构造函数中的 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???");
});
}
}
- 但是 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);
}
}