angular4中子组件改变值不会影响父组件
问题描述
在https://www.angular.cn 中 父组件传值到子组件用单向绑定,此时例子中只是用了@input,并没有用@output,但是我修改子组件里面的input里的值时,却同时将父组件中的指定的li元素的值也修改了,此时应该怎样避免父组件值被修改
相关代码
父组件ts:
import { Component, OnInit } from '@angular/core';
import {HEROES} from '../mock-data';
@Component({
selector: 'app-show-value',
templateUrl: './show-value.component.html',
styleUrls: ['./show-value.component.css']
})
export class ShowValueComponent implements OnInit {
para: Hhh = { //在oninit里面只能先对象继承然后再对象赋值,对象声明要在oninit外用构造函数进行
id: 1,
name: 'ww'
}
ok: string;
heros = HEROES;//列表的mockdata
selectedHero: Hhh;
constructor() {
}
ngOnInit() {
this.ok = 'ss';
}
onselect(hero2: Hhh): void {
this.selectedHero = hero2;
}
}
export class Hhh {
id: number;
name: string;
}
///////////////////////////////////////////////////////////////////////////
父组件的html
<div class = "showValue">
组件id号:{{para.id}}
组件名字:{{para.name|uppercase}}
<input type="text" [(ngModel)] = "para.name" placeholder="name">
<ul class="herosStyle">
<li *ngFor="let herolist of heros" (click)="onselect(herolist)">
<span>{{herolist.name}}</span>
</li>
</ul>
</div>
<app-show-value-detail [hero2]="selectedHero"></app-show-value-detail>
///////////////////////////////////////////////////////////////////////////
子组件html:
<div *ngIf="hero2">
<div>被选中的名字是:{{hero2.name|uppercase}}</div>
<!--<input [(ngModel)]="hero2.name" placeholder="name">-->
</div>
///////////////////////////////////////////////////////////////////////////
子组件ts:
import {Component, Input, OnInit} from '@angular/core';
// import {Hhh} from '../show-value/show-value.component';
@Component({
selector: 'app-show-value-detail',
templateUrl: './show-value-detail.component.html',
styleUrls: ['./show-value-detail.component.css']
})
export class ShowValueDetailComponent implements OnInit {
@Input()
private hero2: Hhh2;
constructor() { }
ngOnInit() {
setInterval(() => {
this.hero2.name = 'sss';
});
}
}
export class Hhh2 {
id: number;
name: string;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你这个不是output和input的问题, 问题的根源是
引用值
和原始值
的问题hero2是个对象,对象在js中是
引用值
, 所以你在子组件中修改了hero2,父组件中的值当然就改变了,因为都指向同一个内存地址。你可以尝试传入的值是一个string, number, boolean 这种原始值, 你再试试, 你就能理解了。
以下是原始值和引用值的基础知识