2017-02-12 1 views
0

ジオロケーションアプリケーションをビルドしています。ユーザーのログイン情報が追加され、その詳細やコードがプッシュされて配列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> 

答えて

0

this._usersNearMeObserver.next(this._usersNearMeDataStore.users);は、あなただけの場所ですあなたのオブザーバーから値を公開しています。このコードは一度だけ呼び出されます。

私は、startTracking()メソッドの中から新しい値を公開したいと思っています。新しい値を取得しているからです。

geoQuery.on("key_entered", (key, location, distance) => { 
    this.nearme.push({ userid: key, userloc: location, userdistance: distance.toFixed(2) }); 
    this.outputUsers(); 
}); 

私はあなたが変更を追跡するたびに値を公表すべき達成しようとしているが、ここでoutputUsers()を追加している結果と内容を正確に把握していません

関連する問題