2017-04-21 38 views

回答

0

直接根據以前的答案。你應該避免2件事(如果可能的話):

  1. 手冊.subscribe()。使用異步管道,以便它可以管理訂閱。
  2. 內部狀態如.subscribe(val => this.val = val)。直接使用流,並添加Subject(行爲,異步,無論),所以完整的邏輯將在流內關閉。

針對您的問題的解決方案是創建一個包含當前索引,可觀察數組並且在索引處發出元素的流。

public index$ = new BehaviorSubject(2) 
public observable$ = Observable.of([1,2,3,4,5]) 

public elementAtIndex$ = Observable.combineLatest(
    this.index$, 
    this.observable$, 
    (index, arr) => arr[index] 
) 

然後在您的視圖:

​​

所以每次指數/陣列改變它發出適當的值。 如果您想要選擇另一個索引,例如5,那麼就執行this.index$.next(5)

或者,如果你只是想獲得一次然後就

public elementAtIndex2$ = this.observable$.map(arr => arr[2]) 
+0

這是我需要的正是。謝謝。 – martinomburajr

+0

whers(索引,arr)是從哪裏來的?我得到'Type'{}'不能用作索引類型'錯誤 – ishandutta2007

+0

'.combineLatest'的最後一個參數採用將合併值作爲參數的函數。看簽名:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/combinelatest.md – krystianpe

0

持有指數2數組元素你可能需要訂閱可觀察,然後按索引訪問該值:

@Component({ 
    template: `Value: {{ observableValue[2] }}` 
}) 
export class SampleComponent implements OnInit { 

    values = Observable.of([1, 2, 3, 4, 5]); 
    observableValue: number[]; 

    ngOnInit(): void { 
    this.values.subscribe(value => this.observableValue = value); 
    } 

} 
0

如果沒有訂閱Observable,您無法獲得價值。

private observable = Observable.of([1,2,3,4,5]) 

或者你可以使用異步管道中的HTML

<p>{{observable | async}}</p> 
相關問題