全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解Angular2组件之间如何通信

组件之间的共享可以有好几种方式

父->子 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)
  }

}

service EventEmitter方式

import {Component,Injectable,EventEmitter} from 'angular2/core';

@Injectable()
class KittencupService {
  change: EventEmitter<number>;

  constructor(){
    this.change = new EventEmitter();
  }
}

@Component({
  selector: 'child',
  template: `
<h2>child {{i}}</h2>
`
})
class Child {

  public i:number = 0;

  constructor(public service:KittencupService){

    service.change.subscribe((value:number)=>{
      this.i = value;
    })
  }
}

@Component({
  selector: 'App',
  directives: [Child],
  providers: [KittencupService],
  template: `
<h1>App {{i}}</h1>
<child></child>
`
})
export class App {

  i:number = 0;

  constructor(service:KittencupService) {
    setInterval(()=> {
      service.change.emit(++this.i);
    }, 1000)
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Angular组件之间通信  # Angular组件通信  # Angular2组件通信  # Angular2 父子组件数据通信实例  # Angular2 父子组件通信方式的示例  # angular中不同的组件间传值与通信的方法  # Angular 2父子组件之间共享服务通信的实现  # Angular2 组件通信的实例代码  # Angularjs2不同组件间的通信实例代码  # angular4 共享服务在多个组件中数据通信的示例  # 不了解  # 在这里  # 大家多多  # 好几种  # content  # Child 


相关文章: 家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  网站制作报价单模板图片,小松挖机官方网站报价?  怎么将XML数据可视化 D3.js加载XML  如何在Windows 2008云服务器安全搭建网站?  无锡营销型网站制作公司,无锡网选车牌流程?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  想学网站制作怎么学,建立一个网站要花费多少?  如何通过主机屋免费建站教程十分钟搭建网站?  ,网页ppt怎么弄成自己的ppt?  建站之星代理费用多少?最新价格详情介绍  如何通过建站之星自助学习解决操作问题?  相册网站制作软件,图片上的网址怎么复制?  如何通过免费商城建站系统源码自定义网站主题与功能?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  如何用花生壳三步快速搭建专属网站?  北京企业网站设计制作公司,北京铁路集团官方网站?  ,柠檬视频怎样兑换vip?  如何通过虚拟主机空间快速建站?  建站之星伪静态规则如何设置?  建站主机解析:虚拟主机配置与服务器选择指南  如何通过服务器快速搭建网站?完整步骤解析  孙琪峥织梦建站教程如何优化数据库安全?  ,在苏州找工作,上哪个网站比较好?  建站之星伪静态规则如何正确配置?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何快速搭建高效WAP手机网站?  网站专业制作公司有哪些,做一个公司网站要多少钱?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  如何选择PHP开源工具快速搭建网站?  中山网站制作网页,中山新生登记系统登记流程?  制作网页的网站有哪些,电脑上怎么做网页?  利用JavaScript实现拖拽改变元素大小  如何选择建站程序?包含哪些必备功能与类型?  如何在阿里云购买域名并搭建网站?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  建站之星安装需要哪些步骤及注意事项?  大连 网站制作,大连天途有线官网?  建站之星导航如何优化提升用户体验?  焦点电影公司作品,电影焦点结局是什么?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  建站之星安装失败:服务器环境不兼容? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。