2016-09-11 14 views
2

次のアクション(たとえば、2回目のボタンをクリック)まで、何らかの理由でアプリケーションが更新されないようです。例えば約束のあるイオン2は、正しく表示をリフレッシュしません

:画面は、それがクリックされた第二の時間まで、{{usernameTemp}}部を有する場合showCredentialsをトリガする

import {Component} from '@angular/core'; 
import {SqlStorage} from "ionic-angular"; 

@Component({ 
    templateUrl: 'build/pages/authenticate/authenticate.html' 
}) 
export class AuthenticatePage { 
    private username: string; 
    private storage: SqlStorage = null; 
    private usernameTemp: string; 

    constructor() { 
    } 

    saveCredentials(){ 
    this.storage = new SqlStorage(); 
    this.storage.set("username", JSON.stringify(this.username)); 
    } 

    showCredentials(){ 
    let sqlStorage = new SqlStorage(); 
    sqlStorage.get('username').then((data) => { 
     if (data != null){ 
     this.usernameTemp = JSON.parse(data); 
     } else{ 
     this.usernameTemp = 'fail'; 
     } 
    }); 
    } 
} 

ワンクリック()関数は、スクリーン上usernameTemp表示されません。 これは以前の値を表示します。何かを書いてsaveCredentials()を使ってセーブすると、showCredentials()を呼び出して値を変更してsaveCredentials()を呼び出し、showCredentials()をもう一度呼び出します。二番目。

私にしか起こりませんか? 何か間違っていますか?

ありがとう、 Nimrod。

答えて

0

あなたが何か間違ったことをやっていますが、およそここで読むことができ、変化検出の特定の方法angular2持っていません。あなたの問題を解決するにはhttp://blog.thoughtram.io/angular/2016/02/22/angular-2-change-detection-explained.html

をあなたのコンストラクタにしてChangeDetectorRefを注入し、約束をから呼び出しdetectChangesを行った場合そのインスタンス。どこでもこれを行う必要はありませんが、これらのような "深い"約束です。 変更を検出するのは高価な操作であり、慎重に使用する必要があります。

3

問題は、あなたの約束が変更を待ち受けるアンギュラゾーン外で実行されていることです。 NgZoneをインポートしてみてください、パラメータとしてコンストラクタに渡して内部あなたの約束をラップ:

import { NgZone } from '@angular/core'; 

その後:

this.ngZone.run(() => { 
    //Your promise code 
}); 
関連する問題