全网整合营销服务商

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

免费咨询热线: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 


相关文章: 建站主机SSH密钥生成步骤及常见问题解答?  如何获取免费开源的自助建站系统源码?  Python lxml的etree和ElementTree有什么区别  如何通过西部数码建站助手快速创建专业网站?  如何快速建站并高效导出源代码?  如何彻底删除建站之星生成的Banner?  如何在VPS电脑上快速搭建网站?  如何通过老薛主机一键快速建站?  Swift开发中switch语句值绑定模式  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  西安专业网站制作公司有哪些,陕西省建行官方网站?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  网站制作报价单模板图片,小松挖机官方网站报价?  如何获取PHP WAP自助建站系统源码?  宝塔建站助手安装配置与建站模板使用全流程解析  建站中国官网:模板定制+SEO优化+建站流程一站式指南  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  韩国服务器如何优化跨境访问实现高效连接?  建站之星2.7模板快速切换与批量管理功能操作指南  如何在云主机上快速搭建网站?  如何在阿里云高效完成企业建站全流程?  平台云上自主建站:模板化设计与智能工具打造高效网站  已有域名如何免费搭建网站?  建站之星图片链接生成指南:自助建站与智能设计教程  简单实现Android文件上传  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  想学网站制作怎么学,建立一个网站要花费多少?  在线制作视频网站免费,都有哪些好的动漫网站?  如何登录建站主机?访问步骤全解析  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  大同网页,大同瑞慈医院官网?  c++ stringstream用法详解_c++字符串与数字转换利器  三星网站视频制作教程下载,三星w23网页如何全屏?  如何高效配置IIS服务器搭建网站?  如何快速搭建FTP站点实现文件共享?  ,购物网站怎么盈利呢?  已有域名和空间如何搭建网站?  如何通过网站建站时间优化SEO与用户体验?  如何通过西部建站助手安装IIS服务器?  江苏网站制作公司有哪些,江苏书法考级官方网站?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  制作营销网站公司,淘特是干什么用的?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  如何解决ASP生成WAP建站中文乱码问题?  ,在苏州找工作,上哪个网站比较好? 

您的项目需求

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