国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解Angular2組件之間如何通信

2024-05-06 15:15:32
字體:
來源:轉載
供稿:網友

組件之間的共享可以有好幾種方式

父->子 input 方式

import {Component,Input} from 'angular2/core';@Component({  selector: 'child',  template: `    <h2>child {{content}}</h2>  `})class Child {  @Input() content:string;}@Component({  selector: 'App',  directives: [Child],  template: `    <h1>App</h1>    <child [content]="i"></child>  `})export class App {  i:number = 0;  constructor() {    setInterval(()=> {      this.i++;    }, 1000)  }}

子->父 output 方式

import {Output,EventEmitter,Component} from 'angular2/core';@Component({  selector: 'child',  template: `    <h2>child</h2>  `})class Child {  @Output() updateNumberI:EventEmitter<number> = new EventEmitter();  i:number = 0;  constructor() {    setInterval(()=> {      this.updateNumberI.emit(++this.i);    }, 1000)  }}@Component({  selector: 'App',  directives: [Child],  template: `    <h1>App {{i}}</h1>    <child (updateNumberI)="numberIChange($event)"></child>  `})export class App {  i:number = 0;  numberIChange(i:number){    this.i = i;  }}

子獲得父實例

如果不了解forwardRef用處的的可以看 #11

@Host 表示這個Injector必須是host element在這里可以理解為 parent

import {Host,Component,forwardRef} from 'angular2/core';@Component({  selector: 'child',  template: `    <h2>child</h2>  `})class Child {  constructor(@Host() @Inject(forwardRef(()=> App)) app:App) {    setInterval(()=> {      app.i++;    }, 1000);  }}@Component({  selector: 'App',  directives: [Child],  template: `    <h1>App {{i}}</h1>    <child></child>  `})export class App {  i:number = 0;}

父獲得子實例

子元素指令在父constructor時是獲取不到的,所以必須在組件的ngAfterViewInit生命周期鉤子后才能獲取,如果對組件生命周期不了解的話,可以參考#56

import {ViewChild,Component} from 'angular2/core';@Component({  selector: 'child',  template: `    <h2>child {{i}}</h2>  `})class Child {  i:number = 0;}@Component({  selector: 'App',  directives: [Child],  template: `    <h1>App {{i}}</h1>    <child></child>  `})export class App {  @ViewChild(Child) child:Child;  ngAfterViewInit() {    setInterval(()=> {      this.child.i++;    }, 1000)  }}

service 方式

import {Component,Injectable} from 'angular2/core';@Injectable();class KittencupService {  i:number = 0;}@Component({  selector: 'child',  template: `    <h2>child {{service.i}}</h2>  `})class Child {  constructor(public service:KittencupService){  }}@Component({  selector: 'App',  directives: [Child],  providers: [KittencupService],  template: `    <h1>App {{i}}</h1>    <child></child>  `})export class App {  constructor(service:KittencupService) {    setInterval(()=> {      service.i++;    }, 1000)  }}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 平武县| 杨浦区| 崇义县| 南江县| 聂拉木县| 连州市| 泰和县| 滁州市| 黎川县| 栖霞市| 庐江县| 遂宁市| 呈贡县| 磐安县| 阿尔山市| 晋城| 团风县| 呼玛县| 理塘县| 共和县| 黑河市| 西平县| 昭苏县| 鄂托克旗| 灌南县| 休宁县| 额尔古纳市| 苍溪县| 榕江县| 永清县| 卫辉市| 陵水| 定陶县| 北宁市| 丹阳市| 泸溪县| 黑龙江省| 深州市| 延长县| 田阳县| 兰州市|