我试图从更改组件的输入装饰器值中删除Test2值。但是无法删除它。那么如何获得解决方案呢?
更改组件:
export class ChangeComponent implements OnInit {
@ViewChild('changeComponent') changeComponent: TableComponent;
constructor() {}
ngOnInit() {}
changeName() {
this.changeComponent.names.pop('Test2');
console.log(this.changeComponent.names);
}
}
2条答案
按热度按时间crcmnpdw1#
组件之间有很多通信方式,在这个例子中,我将创建一个服务,用来保存和操作状态。
这里有一个链接:https://stackblitz.com/edit/angular-ivy-fzd5rx
30byixjq2#
我建议把你的问题写成:如何从同级组件更新组件中输入值?
请回答
组件本身不能直接更改其他同级组件中的@Input值。
以下是一些方法:
"我的建议"
在变更组件上实现ControlValueAccessor以在其上启用ngModeltwo way binding。(names),它将负责在action时更改该值,并将更改后的值发送回父组件。这就是您所需要的全部。下次触发更改检测时,预览组件将通过@输入获得新值。
示例:
在变更组件中:
在父组件模板中:
此示例非常类似于在组件之间进行通信的@Input @Output方式,在该方式中,通过将新值从更改组件发送到父组件来更改同级组件之间的@Input值,并且当触发Angular 更改检测时,父组件将自动将新值传递给预览组件。
下面是我的stackblitz示例
"另一种方法"
在所有同级组件之上提供一个service,并在服务中定义要更改的值,然后在更改同级组件和预览同级组件中注入服务,并直接在服务中更改值,这种方式不需要angular @Input装饰器。
最后,检查有关components interaction的Angular 文档,以便更好地理解。