我有一个输入,它的值是作为另一个组件的输入接收的:
<input [value]="myInput.something">
<span (click)="incrementPlus()">+</span>
我需要一个简单的函数,在每次点击时增加我选择的输入值。这是一个非常简单的事情,除了输入值传递给我:@Input() myInput: number;
,我不需要创建一个保存值的变量,因为我必须在许多其他输入中重复/重用它。我重复一遍:它通常很简单,因为我可以将@输入传递到函数中,修改它,将其保存在变量中,然后将变量传递给html输入值。但是我必须在其他html输入上重用它,并且编写大量变量对我来说似乎不是一个好的实践。
这和我以前见过的所有问题都不一样,因为它们都是静态地改变一个值,或者把它包装在一个变量中,我不想这样做。
如果你想在父组件中也改变的值,您将需要使用@Output和双向绑定。当您输入更改时,您将调用输出EventEmitter的emit来通知父节点值已经更改。
对于双向绑定,输出必须像输入一样命名,加上Change
。
在子元素中:
@Input() something: number;
@Output() somethingChange = new EventEmitter<number>();
在父元素中:
[(something)]="theValue"
然后当你somethingChange.emit
一些值,它改变父的一个,它也传递给你的孩子。
下面是一个完整的例子:https://stackblitz.com/edit/angular-en58l5?file=src%2Fapp%2Fhello.component.ts