首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对组件字符串输入所做的更改不会更改原始字符串

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

Stack Overflow用户
提问于 2019-06-06 05:20:10
回答 1查看 95关注 0票数 1

当一个组件有一个字符串输入,并且它对该字符串输入进行了更改时,更改不会更改原始数据。当对字符串数组输入做同样的事情时,它确实改变了原始数据。

具有inputs.ts的组件:

代码语言:javascript
复制
@Input('str') str:string;
@Input('strArray') str:string[];

changeFunc(){
    this.str = "changed"
    this.strArray.push("changed")
}

具有data.ts的组件:

代码语言:javascript
复制
strData:string = "i am string";
strArrayData:string[] = ["i","am","array"]

具有data.html的组件:

代码语言:javascript
复制
<component-with-inputs [str]="strData" strArray="strArrayData">
</component-with-inputs>

因此,当调用changeFunc时,带有数据的组件上的原始数据将如下所示:

代码语言:javascript
复制
 "i am string";
["i","am","array","changed"]

字符串不会改变,但字符串数组会改变。怎样才能让字符串也改变呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-06 05:53:42

“string”是值类型,而数组是引用类型。

代码语言:javascript
复制
<component-with-inputs [str]="strData" strArray="strArrayData">
</component-with-inputs>

在上面的模板中,"strData“将作为值传递,而"strArrayData”将作为引用传递。

您应该将输入属性值类型更改发送到父组件。请参阅以下代码-

代码语言:javascript
复制
@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');
  }

}

在父组件模板中,请注意框中的香蕉符号-

代码语言:javascript
复制
<app-child [(str)]="myString" [arr]="array"></app-child>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56468170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档