1

私は角度とfirebaseを併用しています。アイテムをロードするのに時間がかかりますが、私はルートスコープに格納しています。私は、製品のリンクをクリックした場合にのみ、私は2秒後にホームページ、製品の負荷に行けば.. http://localhost/product/greyish-sports-shoes角度のあるファイヤーベースフェッチの単一のアイテムには競合条件があります

と:

私の問題は、私が直接、例えば、このページに行くときということですそれは私にそれを取り、製品が既に積み込まれているので動作します。

製品配列を含むshoeServiceに移動しますが、アイテムはまだロードされていないため、そのスラッグで商品が見つかりません。

これは私のrunメソッドで使用するコードです。

var ref = firebase.database().ref().child('products'); 

    $rootScope.shopProds = $firebaseArray(ref); 

マイshoeService工場:

function shoeFactory($rootScope) { 
    this.service = {}; 

    this.service.store = new Store($rootScope.shopProds); 
    this.service.cart = new Cart(); 

    return this.service; 
} 

答えて

1

$firebaseArrayサービスは、最初は空である配列を返すことを認識することが重要です。の後に配列が非同期にに設定され、データがサーバーから返されます。

は、アレイに接続されている$loadedメソッドによって返された約束を使用します。

function shoeFactory($rootScope) { 
    this.service = {}; 

    this.service.storePromise = $rootScope.shopProds.$loaded() 
     .then ((shopProds) => { 
     return new Store(shopProds); 
    });     

    this.service.cartPromise = this.service.storePromise 
     .then (() => { 
     return new Cart(); 
    }).catch((error) => { 
     console.log("ERROR in shoeFactory"); 
     throw error; 
    }); 

    return this.service; 
} 

は、競合状態を避けるために、コードは、チェーンオペレーションへの約束を使用する必要があります。

+0

ありがとうございます。角度1にui状態がまだロードされていないかどうかを知る方法はありますか?私はそれがstateChangeFinishedとrunメソッドの下で行うことができます知っています。 –

+1

これは、コンテキスト、ユースケース、これまでに試したことを示す例を説明する新しい質問が必要です。 – georgeawg

関連する問題