对组件的字符串输入所做的更改不会更改原始字符串

时间:2019-06-05 21:20:09

标签: angular angular-components

当组件具有字符串输入并对其进行更改时,更改不会更改原始数据。 当对字符串数组输入执行相同的操作时,它确实会更改原始数据。

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数组会改变。 我怎样才能使字符串也改变?

1 个答案:

答案 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>