有很多方法。这是一个使用父元素和子元素之间传播的示例。这非常有效。
我提交了一个示例,该示例允许查看两种形式中数据绑定的两种使用方式。如果有人可以提供一个样本,这将是非常好的;-)
您可能会使用服务提供商寻找其他方式。您也可以看一下此视频,以供参考:(在Angular中的组件之间共享数据)
mymodel.ts(要共享的数据)
export class mymodel {
public data1: number;
public data2: number;
constructor(
) {
this.data1 = 8;
this.data2 = 45;
}
}
切记:必须有一个父级将与子级组件共享“ mymodel”。
父组件
import { Component, OnInit } from '@angular/core';
import { mymodel } from './mymodel';
@Component({
selector: 'app-view',
template: '<!-- [model]="model" indicates you share model to the child component -->
<app-mychild [model]="model" >
</app-mychild>'
<!-- I add another form component in my view,
you will see two ways databinding is working :-) -->
<app-mychild [model]="model" >
</app-mychild>',
})
export class MainComponent implements OnInit {
public model: mymodel;
constructor() {
this.model = new mymodel();
}
ngOnInit() {
}
}
子组件mychild.component.ts
import { Component, OnInit,Input } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { mymodel } from './mymodel';
@Component({
selector: 'app-mychild',
template: '
<form #myForm="ngForm">
<label>data1</label>
<input type="number" class="form-control" required id="data1 [(ngModel)]="model.data1" name="data1">
<label>val {{model.data1}}</label>
label>data2</label>
<input id="data2" class="form-control" required [(ngModel)]="model.data2" name="data2" #data2="ngModel">
<div [hidden]="data2.valid || data2.pristine"
class="alert alert-danger">
data2 is required
</div>
<label>val2 {{model.data2}}</label>
</form>
',
})
export class MychildComponent implements OnInit {
@Input() model: mymodel ;
constructor() {
}
ngOnInit() {
}
}
注意:在极少数情况下,解析HTML代码时可能会出错,因为该模型尚未“准备好”在页面初始化时使用。在这种情况下,请在HTML代码前添加ngIf条件:
<div *ngIf="model"> {{model.data1}} </div>