angularjs组件间通讯_详解Angular2组件之间如何通信
組件之間的共享可以有好幾種方式
父->子 input 方式
import {Component,Input} from 'angular2/core';
@Component({
selector: 'child',
template: `
child {{content}}
`
})
class Child {
@Input() content:string;
}
@Component({
selector: 'App',
directives: [Child],
template: `
App
`
})
export class App {
i:number = 0;
constructor() {
setInterval(()=> {
this.i++;
}, 1000)
}
}
子->父 output 方式
import {Output,EventEmitter,Component} from 'angular2/core';
@Component({
selector: 'child',
template: `
child
`
})
class Child {
@Output() updateNumberI:EventEmitter = new EventEmitter();
i:number = 0;
constructor() {
setInterval(()=> {
this.updateNumberI.emit(++this.i);
}, 1000)
}
}
@Component({
selector: 'App',
directives: [Child],
template: `
App {{i}}
`
})
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: `
child
`
})
class Child {
constructor(@Host() @Inject(forwardRef(()=> App)) app:App) {
setInterval(()=> {
app.i++;
}, 1000);
}
}
@Component({
selector: 'App',
directives: [Child],
template: `
App {{i}}
`
})
export class App {
i:number = 0;
}
父獲得子實例
子元素指令在父constructor時是獲取不到的,所以必須在組件的ngAfterViewInit生命周期鉤子后才能獲取,如果對組件生命周期不了解的話,可以參考#56
import {ViewChild,Component} from 'angular2/core';
@Component({
selector: 'child',
template: `
child {{i}}
`
})
class Child {
i:number = 0;
}
@Component({
selector: 'App',
directives: [Child],
template: `
App {{i}}
`
})
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: `
child {{service.i}}
`
})
class Child {
constructor(public service:KittencupService){
}
}
@Component({
selector: 'App',
directives: [Child],
providers: [KittencupService],
template: `
App {{i}}
`
})
export class App {
constructor(service:KittencupService) {
setInterval(()=> {
service.i++;
}, 1000)
}
}
service EventEmitter方式
import {Component,Injectable,EventEmitter} from 'angular2/core';
@Injectable()
class KittencupService {
change: EventEmitter;
constructor(){
this.change = new EventEmitter();
}
}
@Component({
selector: 'child',
template: `
child {{i}}
`
})
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: `
App {{i}}
`
})
export class App {
i:number = 0;
constructor(service:KittencupService) {
setInterval(()=> {
service.change.emit(++this.i);
}, 1000)
}
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
總結
以上是生活随笔為你收集整理的angularjs组件间通讯_详解Angular2组件之间如何通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 语言 山东专升本 真题_专升本英语真题
- 下一篇: ios 绘制线框_iOS 绘制虚线框