2
我无法坚持观察者。我有一个创建可观察元素的组件,并在回调中捕获观察者。但后来,我无法得到那个观察者 - 就好像我有另一个组件实例一样。Angular2观察者失踪
例子:
import {Component} from 'angular2/core';
import {Observable} from 'rxjs/Observable';
@Component({
selector: 'users-table',
templateUrl: './components/users/users-table.html',
// template: '<button (click)="popup({value: 2})">Clickme</button>'
})
export class UsersTableComponent {
public userClicked$: Observable<any>;
public observer: any;
public thing: number;
constructor() {
console.log('Starting UsersTable component');
this.thing = 1;
this.userClicked$ = new Observable(observer => {
this.thing = 2;
console.log('Observer received:', observer);
this.observer = observer;
this.observer.next('Val 1'); // I receive this in an outside component
}).share(); // This supposedly makes the observable *hot*
}
public handle(value) {
console.log('Value:', value);
console.log(this.userClicked$);
console.log('thing:', this.thing); // This is set back to "1
this.observer.next(user); // this.observer is undefined
// so it fails here
}
}
请注意,我订阅从另一个组成部分,我得到的是最初的测试值('val 1'
)
另一个组成部分是听,订阅的“ngAfterViewInit “,基本上是这样的:
this.usersTableComponent.userClicked$.subscribe(val => { console.log('heard ya:' val); });
我是否缺少明显的东西?我可以以某种方式直接使用点击处理程序来传递点击的用户事物吗? (表中的一行)?
Angular2测试版8
好吧,我从另一个组件订阅这一点 - 我理解的初始值。我甚至使它变热,让我更新。 – Zlatko
只需检查'this.observer && this.observer.next(user);'如果没有订阅者,那么发布事件就没有意义。 –
谢谢。我已经编辑了这个问题,以清楚地表明我*订阅了*,并* * *获得了我发布的初始_Val 1_。后者不会被发送,因为看起来好像我的模板看到了组件的不同实例。 – Zlatko