我正在使用DashboardComponent
从我的DashboardService
. 然后,此组件将我的对象数组传递给我的表单组件。
(帖子底部的Plunkr链接)
仪表板组件.ts
private bottleArray: Bottle[] = [];
ngOnInit() {
// Get bottle types from service to the form needing them
this.dashboardService.getBottleTypesAndNames()
.subscribe(bottlesData => {
bottlesData.forEach(bottle => {
// Convert to Bottle type
let bottleObject: Bottle = new Bottle(bottle.bottleTypeId, bottle.bottleName);
this.bottleArray.push(bottleObject);
});
});
}
仪表板组件.html
<ct-create-order-form [bottleArray]="bottleArray"> </ct-create-order-form>
我这样做是为了让链接到我的表单组件Dashboard
不会对我的服务进行任何调用。
我正在尝试clone
我的@Input,以便我从表单更新的数据没有链接到我的父组件(仪表板),但我似乎无法做到这一点......见下面的代码:
CreateOrderFormComponent.ts
export class CreateOrderFormComponent implements OnChanges {
@Input() private bottleArray: Bottle[];
constructor() { }
private clonedBottleArray: BottleCommand[];
ngOnChanges(changes) {
if (changes.bottleArray) {
let test: BottleCommand[] = changes.bottleArray.currentValue;
// Cloning
console.log(test); // Array of 6 Bottles
this.clonedBottleArray = [...test];
console.log(this.clonedBottleArray); // Empty Array
this.clonedBottleArray = Array.from(test);
console.log(this.clonedBottleArray); // Empty Array
this.clonedBottleArray = test.slice();
console.log(this.clonedBottleArray); // Empty Array
this.clonedBottleArray = test;
console.log(this.clonedBottleArray); // Array of 6 bottles
}
}
有什么办法可以实现我正在做的事情吗?我不明白为什么我在获取数据时无法克隆我的输入?
从 AngularConnect 制作的这个 Youtube 视频中,他正在做同样的事情,除了他正在操纵一个对象,而我正在操纵一个对象数组。
https://youtu.be/-nsedZwvl9U?t=12m22s
编辑:创建 Plunkr 后,这似乎在那里正常工作。
https://plnkr.co/edit/js1vl0fcgOKtQNqXsWTL?p=preview
编辑 2: 在ngOnInit()
from myDashboardComponent
中,如果我模拟数据,它会在我的子组件中正确克隆。