时间:2021-05-25
组件之间的共享可以有好几种方式
父->子 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) }}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文介绍了浅谈angular2组件的生命周期钩子,分享给大家,具体如下:按照生命周期执行的先后顺序,Angular生命周期接口如下所示名称时机接口范围ngOnC
angular2子组件的事件传递angular2有很多组件组成,画面由很多路由,导致事件的传递很“笨拙”,本组的技术负责人发现了任意组件传递事件的这个方法,教会
Angular2以组件化的视角来看待web应用,使用Angular2开发的web应用,就是一棵组件树。组件大致分为两类:一类是如list、table这种通放之四
angular2里默认切换路由或者切换组件,页面的title是不会变化的。angular2在路由设置里提供了data参数可以传值,如下{path:'home',
ChangeDetection(变化检测)是Angular2中最重要的一个特性。当组件中的数据发生变化的时候,Angular2能检测到数据变化并自动刷新视图反映