2016-12-06 72 views
1

我有一個非靜態的traduction文件,我定期從服務器獲取。我不能改變文件的格式。在離子2級中延遲訪問屬性

當我在我的Ionic App中創建一個新頁面時,我從存儲器中的值中設置了this.traductions。請參見下面的構造函數:

constructor(storage: Storage, public navCtrl: NavController, public navParams: NavParams, public commandeService: CommandeService, public alertCtrl: AlertController, public translate: TranslateService) { 

    this.categorie = this.navParams.get('categorie'); 

    storage.get('boissons').then((StringBoissons) => { 
     var boissons: Array<any> = JSON.parse(StringBoissons); 
     this.boissons = boissons.filter(
     (value) => { 
      return value.tboi_id == this.categorie.tboi_id; 
     }); 
     } 
    ); 
    storage.get('traductions').then((val) => { 
     this.traductions = JSON.parse(val); 
    }); 
    this.commande = commandeService.getCommande(); 
    this.translate = translate; 
    } 

然後我查看通話getTraduction(...)

getTraduction(table, champ, id, objet) { 
    var traduction = this.traductions.find((value) => { 
     return value.trad_table == table && value.trad_champ == champ && value.trad_code_langue == this.translate.currentLang && value.trad_id_item == objet[id]; 
    }); 
    if (traduction && traduction.trad_texte ) 
     return traduction.trad_texte; 
    else 
     return objet[champ]; 
    } 

一切正常,在瀏覽器中預覽正常,但在設備上,我得到一個

無法調用空 的方法「發現」 at t.getTraduction

我認爲這是由於異步結果,但我不能完全讓我的頭在附近,並計算如何解決這個問題。

預先感謝任何見解

回答

0

OK相當愚蠢的問題實際上維爾託德: 你應該把你的getTraduction功能的供應商。

@Injectable() 
export class TraductionDynaService { 

    traductions; 

    constructor(
    public storage: Storage, 
    public http: Http, 
    public translate: TranslateService, 
    ) { 
    storage.get('traductions').then((val) => { 
     this.traductions = JSON.parse(val); 
    }); 
    } 

    getTraduction(table, champ, id, objet) { 
    var traduction = this.traductions.find((value) => { 
     return value.trad_table == table && value.trad_champ == champ && value.trad_code_langue == this.translate.currentLang && value.trad_id_item == objet[id]; 
    }); 
    if (traduction && traduction.trad_texte ) 
     return traduction.trad_texte; 
    else 
     return objet[champ]; 
    } 

} 

它的工作就像一個魅力。 getTraduction(...)甚至可能會返回一個承諾,以處理傳播爲空或未定義...