ジオロケーションアプリケーションをビルドしています。ユーザーのログイン情報が追加され、その詳細やコードがプッシュされて配列nearmenに追加されますFirebaseから。希望の結果は、この配列はコンポーネントhtmlで出力できるobservableに変換されますが、何も間違っているように見えます。明らかに、私がoutputUsers()の配列にアクセスする方法は間違っていますが、問題が何であるかを把握することはできません。また、この配列を非同期にする方法もあります。Asyncをサービス内の配列から取得してテンプレートに出力する
import { Injectable, NgZone } from '@angular/core';
import { Geolocation, Geoposition, BackgroundGeolocation } from 'ionic-native';
import 'rxjs/add/operator/filter';
import { Fb } from './firebase';
import 'rxjs/Rx';
import { Observable } from 'rxjs/Observable';
import { Observer } from 'rxjs/Observer';
import { AsyncSubject } from 'rxjs/AsyncSubject';
import 'rxjs/add/operator/share';
import 'rxjs/add/operator/map';
export class Iusers {
userid: string;
userdistance: string;
userloc: string;
}
@Injectable()
export class LocationTracker {
public usersNearMe$: Observable<Iusers[]>;
private _usersNearMeObserver: Observer<Iusers[]>;
private _usersNearMeDataStore: { users: Iusers[] };
public nearme = <[Iusers]>[];
constructor(public zone: NgZone, public fire:Fb) {
this.usersNearMe$ = new Observable<Iusers[]>(observer => this._usersNearMeObserver = observer).share();
this._usersNearMeDataStore = { users: [] };
}
startTracking(activeUser:any) :any {
... other stuff going on here .....
geoQuery.on("key_entered", (key, location, distance) => {
this.nearme.push({ userid: key, userloc: location, userdistance: distance.toFixed(2) });
});
}
outputUsers() {
this._usersNearMeDataStore.users = this.nearme;
this._usersNearMeObserver.next(this._usersNearMeDataStore.users);
}
}
それは次のようにそれがレイアウトされている受信すると、この情報を表示するコンポーネント:
outputUsers()
内部
export class OverviewPage {
public members: FirebaseListObservable<any[]>;
public activeUser: string;
public usersNearMe: Observable<any>;
constructor( public locationTracker: LocationTracker, public fire: Fb, af: AngularFire, public appHeaderPopover:AppHeaderPopoverController, public zone: NgZone, public navCtrl: NavController, public navParams: NavParams) {
this.locationTracker.startTracking(this.activeUser);
this.locationTracker.usersNearMe$
this.locationTracker.outputUsers();
}
... more stuff...
}
とHTMLテンプレート
<div class="" *ngFor="let item of usersNearMe | async">
item {{ item.key }}
</div>