Angular2 父子组件通信方式的示例(3)
<!--child.component.html--> <div class="card" style="width: 500px;"> <div class="card-header"> 子组件 </div> <div class="card-body"> <h5 class="card-title">子组件</h5> <div class="form-group"> <label for="input">子组件输入:</label> <input type="text" class="form-control" id="input" placeholder="Input something" [(ngModel)]="contentFromChild" > </div> </div> </div>
效果如下:
父组件核心代码:
//ts @ViewChild(ChildComponent) // 使用viewChild导入引用 private childComponent: ChildComponent; // 将子组件注入到私有属性 //获取子组件数据并显示 clickView() { //直接获取子组件的属性 this.viewOutput = this.childComponent.contentFromChild; }
//html [(ngModel)]="viewOutput" <button class="btn btn-primary" (click)="clickView()">ViewChild方式</button>
父组件和子组件通过服务来通讯
父组件和它的子组件共享同一个服务,利用该服务在家庭内部实现双向通讯。
<!--parent.component.html--> <div style="width: 1000px;margin: auto"> <div class="card" style="width: 500px;float: left"> <div class="card-header"> 父组件 </div> <div class="card-body"> <h5 class="card-title">父组件</h5> <div class="form-group"> <label for="serviceoutput">父组件服务输入:</label> <input type="text" class="form-control" id="serviceoutput" placeholder="服务输入" [(ngModel)]="serviceInput" > </div> <button class="btn btn-primary" (click)="clickService()">Service方式</button> </div> </div> <app-child></app-child> </div>
<!--child.component.html--> <div class="card" style="width: 500px;"> <div class="card-header"> 子组件 </div> <div class="card-body"> <h5 class="card-title">子组件</h5> <div class="form-group"> <label for="serviceoutput">子组件服务输入:</label> <input type="text" class="form-control" id="serviceoutput" placeholder="服务输入" [(ngModel)]="serviceInput" > </div> <button class="btn btn-primary" (click)="clickService()">Service方式</button> </div> </div>
//服务 //meditor.service.ts import {Injectable} from '@angular/core'; import {Subject} from 'rxjs/Subject'; import {Observable} from 'rxjs/Observable'; @Injectable() export class MeditorService { private subject = new Subject<MeditorMsg>(); constructor() {} // 获取订阅者 public getObservable(): Observable<MeditorMsg> { return this.subject.asObservable(); } // 推送信息 public push(msg: MeditorMsg) { this.subject.next(msg); } } // 中间者信息 export interface MeditorMsg { id: string; body: any; }
内容版权声明:除非注明,否则皆为本站原创文章。