2017-11-02 6 views
0

私はAngular 2 CLIとFirebaseを使用してWebソリューションを継承し、コードをクリーンアップしようとしています。これはシンプルなゲームで、このコードを使用してユーザーを同期させます。角度2 /プロセス状態を追跡するための観測可能なコードパターン

これは、ゲームの状態を追跡するために、ユーザー側のコード...

ngDoCheck(){ 
    if(this.subGame['game_state'] == 'question'){ 
     this.setAnswerStart(); 
    }else if(this.subGame['game_state'] == "answer"){ 
     this.updateGame(); 
    }else if(this.subGame['game_state'] == 'leaderboard'){ 

     this.startTime = null; 
     console.log("Question timer was reset to ZERO"); 
    } 
    } 

副ゲームオブジェクトがFirebaseリアルタイムDBへのサブスクリプションで、ゲームはにgame_stateプロパティを設定されていますすべてのユーザーを同期させてください。

ゲームは、このようなクイズプロセスを歩く:

  1. 質問:回答を表示
  2. トップ10::ショー スコア
  3. [REPEAT]
質問
  • 回答を表示します

    問題は、ngDoCheckフックを使用して状態を追跡しているため、いつでもこれらのイベントが発生しているためですeゲームオブジェクトの変更。 setAnswerStartメソッドは、ユーザーが質問を表示する時刻を追跡しますが、このコードでは、ユーザーがDBに応答を送信したときにいつでも起動します。

    私はこのような状況プロセスを追跡する必要があるときに、このような状態オブジェクトを追跡するためのコードパターンを私がSOに提示することを望んでいます。

    :私はイベントとは、例えば、
  • 答えて

    0

    がはいあなたがBeheviorSubject、または別の持つEventEmitterを使用することができます「場合(STEP2にSTEP1から行く)」のように発生したときのリスナーを設定する方法を持っている場合、それは非常に参考になります
    state = 'waiting'; 
    checkState: BehaviorSubject<any> = new BehaviorSubject(this.state); 
    

    ユーザーが質問を送信するときに、フォームを確認した後、this.checkState.next('submitted')を入力するだけです。あなたのngOnInitで次に

    ()状態に加入:

    this.checkState.subscribe((state) => 
        { 
        this.state = state; 
        }); 
    
    関連する問題