问问题
6127 次
3 回答
6
你订阅了你的 observable 两次。订阅后,异步管道在内部执行此操作。
当subscribe
方法被执行时,它执行subscribe
函数
observer => this.observer = observer
并覆盖this.observer
属性,因此它仅对异步管道(最后一个订阅者)有效
我会使用share
运算符来解决它
new Observable(observer => this.observer = observer).share();
要查看为什么this.observer
被覆盖,只需运行此代码
let myObserver;
const observable$ = new Rx.Observable(function subscribe(observer) {
console.log('subscribe function has been called');
myObserver = observer;
});
observable$.subscribe(function next1() { console.log('next1'); });
observable$.subscribe(function next2() { console.log('next2'); });
observable$.subscribe(function next3() { console.log('next3'); });
myObserver.next();
正如我提到的,早期的异步管道在内部订阅了 observable
https://github.com/angular/angular/blob/4.3.x/packages/common/src/pipes/async_pipe.ts#L23
于 2017-07-15T20:41:34.793 回答
1
你应该使用
[ngValue]="value"
而不是 [值]
赋值为
public selectedValue: string = 'test';
HTML 应更改为
<select [(ngModel)]="selectedValue">
<option *ngFor="let value of values$ | async"
[ngValue]="value">{{ value }}
</option>
</select>
于 2017-07-15T20:15:47.267 回答
1
您应该将其绑定到 ngValue:
<div>
<h2>Hello {{name}}</h2>
</div>
<select [(ngModel)]="selectedValue">
<option *ngFor="let value of (values$ | async)"
[ngValue]="selectedValue">{{ value }}
</option>
</select>
于 2017-07-15T20:16:24.500 回答