Angular 组件之间的角度2单向绑定

Angular 组件之间的角度2单向绑定,angular,binding,components,Angular,Binding,Components,我想知道为什么Angular 2中的单向绑定只适用于字符串属性,而不适用于字符串数组 我有一个父组件和一个子组件。。。我传递字符串集合和字符串,并在内部更改它们,字符串属性类型在子组件指令中修改,而不是在父组件指令中修改(这是我所期望的),但是,当我修改数组的第一个元素时,更改会反映在父模板和子模板中 父组件 names : Array<string> = [...] name : string = "App Works"; @Input("names") _names : Arr

我想知道为什么Angular 2中的单向绑定只适用于字符串属性,而不适用于字符串数组

我有一个父组件和一个子组件。。。我传递字符串集合和字符串,并在内部更改它们,字符串属性类型在子组件指令中修改,而不是在父组件指令中修改(这是我所期望的),但是,当我修改数组的第一个元素时,更改会反映在父模板和子模板中

父组件

names : Array<string> = [...]
name : string = "App Works";
@Input("names") _names : Array<string>;
@Input("title") _name : string;
names:Array=[…]
名称:string=“应用程序工作”;
子组件

names : Array<string> = [...]
name : string = "App Works";
@Input("names") _names : Array<string>;
@Input("title") _name : string;
@Input(“name”)\u name:Array;
@输入(“标题”)\u名称:字符串;
父组件模板

{{names | json}}
<app-person [names]="names" [title]="name">
  <p>Awesome !!!</p>
</app-person>
{{names | json}
太棒了

预期的行为是,如果我尝试在我的子组件指令中修改数组的第一个元素,则更改不会反映在父组件中,而是反映在子组件中


我正在PluralSight中学习和做一些教程…

这是预期的,因为您正在共享同一个实例。如果您不想共享更改,那么您应该在子组件中克隆数组。

Javascript有一种疯狂的方式。如果将字符串作为param(或任何基元值)传递,则函数将获取该字符串的副本,任何修改都不会影响函数外部的原始变量,只会影响其内部的副本

这是我们在许多语言中所期望的,但对于其他类型(非原语),函数不获取参数的副本,它实际上获取对原始对象的引用,并且在函数内部所做的任何修改都将改变原始对象

我想这就是你问题的原因

要解决此问题,可以创建阵列的副本。一种方法是在JSON中序列化/取消序列化数组:

函数(MyExternalray){
让myLocalArray=JSON.parse(JSON.stringify(MyExternalray));
//你的代码在这里
}

谢谢@AngularFrance,您的修改使答案更容易理解!很乐意帮忙。:)