当组件具有字符串输入并对其进行更改时,更改不会更改原始数据。 当对字符串数组输入执行相同的操作时,它确实会更改原始数据。
component-with-inputs.ts:
@Input('str') str:string;
@Input('strArray') str:string[];
changeFunc(){
this.str = "changed"
this.strArray.push("changed")
}
component-with-data.ts:
strData:string = "i am string";
strArrayData:string[] = ["i","am","array"]
component-with-data.html:
<component-with-inputs [str]="strData" strArray="strArrayData">
</component-with-inputs>
因此,当调用changeFunc时,带有数据的组件上的原始数据将如下所示:
"i am string";
["i","am","array","changed"]
string不会改变,而string数组会改变。 我怎样才能使字符串也改变?
答案 0 :(得分:1)
“字符串”是值类型,而数组是引用类型。
<component-with-inputs [str]="strData" strArray="strArrayData">
</component-with-inputs>
在上述模板中,“ strData”将作为值传递,而“ strArrayData”将作为引用传递。
您应该将输入属性[值类型]更改发送到父组件。请参阅以下代码-
@Component({
selector: 'app-child',
templateUrl: './your.component.html',
styleUrls: ['./your.component.css']
})
export class YourChildComponent implements OnInit {
@Input('str') str: string;
@Input() arr: Array<string>;
@Output() strChange = new EventEmitter<string>();
constructor() { }
ngOnInit() {
}
change() {
this.strChange.emit('I am new string');
this.arr.push('I am new string in array');
}
}
在父组件模板中[注意方框符号中的香蕉]-
<app-child [(str)]="myString" [arr]="array"></app-child>