这更像是一个"最佳实践"问题.有三个球员:a Component
,a Service
和a Model
.在Component
被调用Service
从数据库中获取数据.该Service
方法是使用:
this.people = http.get('api/people.json').map(res => res.json());
Run Code Online (Sandbox Code Playgroud)
返回一个Observable
.
在Component
可以只订阅Observable
:
peopleService.people
.subscribe(people => this.people = people);
}
Run Code Online (Sandbox Code Playgroud)
但是,我真正想要的是Service
返回从数据库中检索Array of Model
的数据创建的对象Service
.我意识到Component
可以在subscribe方法中创建这个数组,但我认为如果服务可以做到这一点并使其可用,那将会更清晰Component
.
如何Service
创建一个新的Observable
,包含该数组,并返回?
现在的情况:
我有一个parent
和一个child
组件.
在parent
初始化child
使用它的数据@Input
.child
当用户使用编辑数据时,通知父母@Output
.并且由于数据是不可变的,因此child
必须将数据与该通知一起发送.
当parent
得到通知时,它将检查提交的数据是否有效,然后将其设置(这也将新值传播到其他一些子组件).
问题:
当在其中设置新数据时parent
,它当然也会将其提供给child
刚刚提交数据的组件.这将触发child
's ngOnChanges
,然后触发重新绘制UI.
一些背景:
它parent
有几个不同的child
组件,它们都依赖于相同的myItem
数据,可以编辑这些数据,然后通知parent
更改.
这是代码的简化版本,应该会显示问题.
父组件:
template:
<child [input]="myItem" (output)="onMyItemChange($event)">
code:
ngOnInit() {
this.myItem = getDataViaHTTP();
}
onMyItemChange($event) {
if($event.myItem.isValid()) {
this.myItem = $event.myItem;
}
}
Run Code Online (Sandbox Code Playgroud)
子组件:
template:
<input [(ngModel)]="myItem.name" (ngModelChange)="modelChange($event)">
code:
@Input() input;
@Output() output = new EventEmitter();
myItem; …
Run Code Online (Sandbox Code Playgroud)