Angular2 2.0.0 beta.15,Rxjs 5.0.0-beta.2angular2 rxjs共享认购不点火
我有两个简单的rxjs观测,一个共享的,一个不叫就可以了(.share() )
我有一个angular2组件,它订阅了两个observables,并在其模板中显示值,该模板也用异步管道预订了observables。
我点击一个按钮来设置.next()两个observables与一些垃圾。
该模板更新并显示每个的最新值。 组件中的订阅函数不会为非共享的observable激发。为什么?
plunkr: https://plnkr.co/edit/IIWvnTT1zLit1eUNknkk?p=preview
@Component({
selector: 'my-app',
template: `
<div>
<div>obs1 value: {{ observable1 | async }}</div>
<div>obs2 value: {{ observable2 | async }}</div>
<button (click)="randomizeIt()">randomize it</button>
<br>
<h3>Question 1</h3>
Why is obs1's initial value (from startWith) not displayed?
<h3>Question 2</h3>
Why does our subscription to obs2 never fire on new values?<br>
check console.log to see what i mean.
</div>`,
})
export class App {
public observable1:Observable<string>;
public observer1:any;
public observable2:Observable<string>;
public observer2:any;
constructor() {
this.observable1 = Observable.create(observer => {
this.observer1 = observer;
}).startWith("initial obs 1 value").share();
this.observable1.subscribe((val) => {
console.log('YOU WILL SEE THIS:', val);
})
this.observable2 = Observable.create(observer => {
this.observer2 = observer;
}).startWith("initial obs 2 value"); // no share!
this.observable2.subscribe((val) => {
console.log('WHY DOES THIS NEVER FIRE ON NEW VALUES?:', val);
})
}
public randomizeIt() {
let r = Math.random();
console.log('set both obs to: ', r);
this.observer1.next(r);
this.observer2.next(r);
}
}
提前感谢!
谢谢!我明白Q1的答案。但我还不明白Q2。我注意到如果我删除{{observable2 |异步}},我的observer2订阅将随机randomItIt。完全需要更多的咖啡 –
@ user2073082,因为当你删除'{{observable2 | async}}'只有一个'observable2'的实例。换句话说,你只调用一次'this.observable2.subscribe()'。因此,您只有一个该Observable的实例。 – Abdulrahman
@ user2073082检查[this plunker](https://plnkr.co/edit/u1ddd4ZQCEzjTLElTs1Q?p=preview)。 'observable2'将会发出一个随机值。因为该Observable有两个实例。 '{{observable2 | async}}'与日志中的不同。 – Abdulrahman