angular 中组件之间的两种方式绑定 2-4
Two way binding between components in angular 2-4
我希望子组件值绑定到父组件。当 @Input()
和 [(ngModel)]
不够时如何完成此操作?
使用@Output()
例如
@Output() event: EventEmitter<Type> = new EventEmitter();
通过emit
函数发送数据
send(): void {
this.event.emit(data);
}
阅读更多关于 EventEmitter
在这里你还必须设置 @Output
并更改组件
export class CounterComponent {
@Output('initoChange') emitter: EventEmitter<string> = new EventEmitter<string>();
@Input('inito') set setInitoValue(value) {
this.count = value;
}
count: number = 0;
increment() {
this.count++;
this.emitter.emit(this.count);
}
decrement() {
this.count--;
this.emitter.emit(this.count);
}
}
这里是link到plunker,请看一下
您可以像下面这样进行双向数据绑定:
@Component({
selector: 'app-sizer',
template: `
<div>
<button (click)="dec()" title="smaller">-</button>
<button (click)="inc()" title="bigger">+</button>
<label [style.font-size.px]="size">FontSize: {{size}}px</label>
</div>`
})
export class SizerComponent {
@Input() size: number | string;
@Output() sizeChange = new EventEmitter<number>();
dec() { this.resize(-1); }
inc() { this.resize(+1); }
resize(delta: number) {
this.size = Math.min(40, Math.max(8, +this.size + delta));
this.sizeChange.emit(this.size);
}
}
并在父组件的模板中对 size
进行双向绑定,如下所示:
<app-sizer [(size)]="fontSizePx"></app-sizer>
<div [style.font-size.px]="fontSizePx">Resizable Text</div>
它(双向绑定)只是属性绑定的一个语法糖,所以相当于:
<app-sizer [size]="fontSizePx" (sizeChange)="fontSizePx=$event"></app-sizer>
当 prop
有 Input
属性 调用 prop
和事件(Output
属性) 的名称为 propChange
.
代码来自 angular 文档以获取更多信息导航至此地址:
https://angular.io/guide/template-syntax#two-way-binding---
我希望子组件值绑定到父组件。当 @Input()
和 [(ngModel)]
不够时如何完成此操作?
使用@Output()
例如
@Output() event: EventEmitter<Type> = new EventEmitter();
通过emit
函数发送数据
send(): void {
this.event.emit(data);
}
阅读更多关于 EventEmitter
在这里你还必须设置 @Output
并更改组件
export class CounterComponent {
@Output('initoChange') emitter: EventEmitter<string> = new EventEmitter<string>();
@Input('inito') set setInitoValue(value) {
this.count = value;
}
count: number = 0;
increment() {
this.count++;
this.emitter.emit(this.count);
}
decrement() {
this.count--;
this.emitter.emit(this.count);
}
}
这里是link到plunker,请看一下
您可以像下面这样进行双向数据绑定:
@Component({
selector: 'app-sizer',
template: `
<div>
<button (click)="dec()" title="smaller">-</button>
<button (click)="inc()" title="bigger">+</button>
<label [style.font-size.px]="size">FontSize: {{size}}px</label>
</div>`
})
export class SizerComponent {
@Input() size: number | string;
@Output() sizeChange = new EventEmitter<number>();
dec() { this.resize(-1); }
inc() { this.resize(+1); }
resize(delta: number) {
this.size = Math.min(40, Math.max(8, +this.size + delta));
this.sizeChange.emit(this.size);
}
}
并在父组件的模板中对 size
进行双向绑定,如下所示:
<app-sizer [(size)]="fontSizePx"></app-sizer>
<div [style.font-size.px]="fontSizePx">Resizable Text</div>
它(双向绑定)只是属性绑定的一个语法糖,所以相当于:
<app-sizer [size]="fontSizePx" (sizeChange)="fontSizePx=$event"></app-sizer>
当 prop
有 Input
属性 调用 prop
和事件(Output
属性) 的名称为 propChange
.
代码来自 angular 文档以获取更多信息导航至此地址: https://angular.io/guide/template-syntax#two-way-binding---