2017-05-29 5 views
0

私はIonic 2でアプリを書いていますが、進歩はしていますが、おそらく簡単な解決策と思われるものにハングアップしてしまいました。Ionic 2 setInterval変数スコープ

私は画面上にテキストを表示していますが、5秒後に画面上のテキストを更新したいと思います。私はsetInterval関数内の変数へのアクセスを失うようです。

constructor(public nav: NavController, private navParams: NavParams, private getserver: GetServerService, storage: Storage) { 
    this.storage = storage; 

    this.storage.get('userAuth').then((name) => { 
     if(name.id === undefined) { 
      this.nav.setRoot(LoginPage); //kick back to login if no userdata 
     }else{ 

      let options = {timeout: 120000, enableHighAccuracy: true}; 
      navigator.geolocation.getCurrentPosition((position) => { 

      this.driverStatus = 'hi'; 

      setInterval(()=> { 
       this.driverStatus = 'Updated Text'; 
      }, 2000); 

      }, 
      (error) => { 
      console.log(error); 
      }, 
      options 
     ); 
     } 
    }); 

    } 

} 

私がこのアプリケーションを実行すると、「Hello」というテキストが表示されますが、テキストは「Updated Text」に更新されません。コンソールに出力が正しく表示されます。

私はIonic2 function setInterval can't get a parameterからの提案を試みましたが、これらの提案はどちらも機能しませんでした。私の他の失敗した試みは以下の通りです。

var that = this; 
setInterval(function() { 
    that.userText = 'Updated Text'; 
}, 2000); 

setInterval(()=> { 
    this.userText = 'Updated Text'; 
}, 2000); 

答えて

0

これはhere を議論してきたアンギュラ2. これからのゾーンについて何かあなたがNgZoneのオブジェクトを注入し、そのrun()メソッドを呼び出すことによって、それを修正することができますです

setInterval(()=> { 
    this.ngZone.run(() => { 
     this.userText = 'Updated Text'; 
    }); 
}, 2000); 
+0

お返事ありがとうございます。 ngZoneを動作させるために別のファイルをインクルードする必要があると思います。それは箱から出なかった。 私は、マップを生成するために以前のウィンドウで必要なGPS座標をすでに持っていたので、それらを保存してこのページに渡したので、私の問題を否定しました。それはあまりにもアプリを少しスピードアップした。 –

+0

コンポーネントでmportしてからコンストラクタに注入する必要があります。 –