2017-02-19 24 views
6

Tôi có danh sách, mà nên mô phỏng các dòng:Nhận suối Quan sát góc như mảng

list = [ 
    {name : 'Str1', age: 10}, 
    {name : 'Str2', age: 10}, 
    {name : 'Str3', age: 10} 
]; 

và tôi đã tạo ra một Observable khỏi danh sách này:

Observable.from(this.list).skip(this.currentPage * this.pageSize).take(this.pageSize).subscribe(data => this.pagerList = data, console.error); 

Và trong đăng ký phương pháp tôi nhận được các giá trị một. Làm thế nào tôi phải chờ đợi cho toàn bộ dữ liệu được trả lại và sau đó để có được toàn bộ danh sách. Có toán tử take(), và sau đó nó có thể dừng lại.

Tôi không muốn đặt từng giá trị một trong mảng.

Tôi mới ở đây, không chỉ cho góc cạnh mà còn cho cả javascript nữa.

Trả lời

3

Bạn đã cố gắng sử dụng toArray hành ?.

let list = [ 
 
    { name: 'Str1', age: 10 }, 
 
    { name: 'Str2', age: 10 }, 
 
    { name: 'Str3', age: 10 }, 
 
    { name: 'Str4', age: 10 }, 
 
    { name: 'Str5', age: 10 }, 
 
    { name: 'Str6', age: 10 } 
 
]; 
 

 
let currentPage = 2; 
 
let pageSize = 2; 
 

 
Rx.Observable.from(list) 
 
    .skip(currentPage * pageSize) 
 
    .take(pageSize) 
 
    .toArray() 
 
    .subscribe(data => console.log(data), console.error);
<script src="https://npmcdn.com/@reactivex/[email protected]/dist/global/Rx.min.js"></script>

+0

Cảm ơn bạn. Cái này hoạt động rất tốt. – makkasi

3

Nhà điều hành scan nên làm những gì bạn muốn

Observable.from(this.list) 
.skip(this.currentPage * this.pageSize) 
.take(this.pageSize) 
.scan([], acc, curr) => {acc.push(curr); return acc;}); 
.subscribe(data => this.pagerList = data, console.error); 

http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-scan

+1

http://rxmarbles.com/#scan này như giảm nhưng sau khi kết quả nhận được. Cảm ơn bạn đã trả lời. – makkasi

+1

Với 'scan' bạn nhận được một mảng cập nhật sau mỗi sự kiện và với' toArray' bạn chỉ nhận được một mảng ở cuối khi hoàn thành có thể quan sát được. –

1

Tôi nghĩ rằng đây là giải pháp thích hợp hơn:

Observable.of(this.list).map(x => x.slice(this.currentPage * this.pageSize)).map(x => x.slice(0, this.pageSize)).subscribe(data => this.pagerList = data, console.error); 
+0

Tôi không hiểu điều này. Trong chức năng bản đồ đầu tiên bạn nhận được đối tượng. Làm thế nào bạn có thể cắt đối tượng? – makkasi

+2

'Observable.of (this.list)' tạo chuỗi của một phần tử có kiểu là mảng, 'map' được áp dụng cho giá trị quan sát được, trong trường hợp này nó là mảng. – kemsky

Các vấn đề liên quan