在这个plnkr ( http://plnkr.co/edit/MT3xOB?p=info ) 中,您从模板中定义/派生的数据对象中调用了.toRx().subscribe( ... )函数。
@Component({
selector : 'child-cmp',
template : '',
inputs : ['data']
})
class ChildCmp {
afterViewInit() {
this.data.toRx().subscribe((data) => {
console.log('New data has arrived!', data);
});
}
}
在这个plnkr(http://plnkr.co/edit/rNdInA?p=preview)中,您从一个evt对象和其发射器函数(来自注入到组件构造函数中的服务)调用.toRx().subscribe(...)函数。请保留HTML标签。
@Component({
selector : 'parent-cmp',
template : ''
})
class ParentCmp {
constructor(evt: EventService) {
evt.emitter.subscribe((data) =>
console.log("I'm the parent cmp and I got this data", data));
}
}
在Service函数内部进行BROADCAST是否可行?同时,组件是否可以接收消息而不依赖返回的Service对象或Template数据对象来链式调用.toRX().subscribe( ... )函数?
import {Injectable, EventEmitter} from 'angular2/angular2';
@Injectable()
export class DataService {
items:Array<any>;
dispatcher: EventEmitter = new EventEmitter();
constructor() {
this.items = [
{ name: 'AAAA' },
{ name: 'BBBB' },
{ name: 'CCCC' }
];
}
getItems() {
return this.items;
}
sendItems() {
this.dispatcher.next( this.items );
}
}
export var DATA_BINDINGS: Array<any> = [
DataService
];
@Component({
selector: 'rabble'
})
@View({
...
})
export class Rabble {
items : Array<any>;
constructor( public dataService : DataService) {
console.log('this.routeParam', this.dataService.getItems());
}
afterViewInit() {
this.???.toRx().subscribe((data) => {
console.log('New item data has arrived!', data);
});
}
handleClick() {
this.dataService.sendItems();
}
}
myObserverService.observers.myCustomEvent.subscribe(...)
或者你可以在你的服务中创建一个帮助程序,像这样:myObserverService.listen('myCustomEvent',(data)=>{},(error)=>{})
- Dennis Smoleksubject.next()
的方法。关于回调函数,当然,如果你最终只是订阅来调用回调函数,那么整个意义就被忽略了。当你真正充分利用可观察对象时,在订阅之前组合不同的流就会有所不同。 - superjos