1

Firebaseのスナップショットの結果を配列として返すようにしています。ng-repeat(デフォルトではオブジェクトを返しました)最後の行は、配列内のオブジェクトを繰り返しスコープに設定します。しかし、私は配列に値を設定する基本的な考え方を混乱させるようです:/どんな助けも素晴らしいでしょう。Firebaseスナップショットを配列として取得し、スコープに設定

const businessKey = '-KQ1hFH0qrvKSrymmn9d'; 
const rootRef = firebase.database().ref(); 
const discoverRef = rootRef.child('discover'); 
const businessRef = rootRef.child('businesses'); 


function getDiscoverBarContent(key, cb) { 
    discoverRef.child(key).on('child_added', snap => { 
     let businesRef = businessRef.child(snap.key); 
     businesRef.once('value', cb); 
    }); 
} 

getDiscoverBarContent(businessKey, snap => { 
    snap.forEach((child) => { 
     var item = {}; 
     item._key = snap.val(); 
     array.push(item); 
     /*$scope.discover = array*/ 
     }) 
}); 

答えて

0

私は他の回答が働いている可能性が確信していますしかし、私は本当に別の方法を使うために私が持っていたものを破壊したくなかった。ここで私は、この問題を解決するために使用されるコードは次のとおりです。

$scope.discover = []; 
const businessKey = $scope.finalItem.$id; 
const rootRef = firebase.database().ref(); 
const discoverRef = rootRef.child('discover'); 
const businessRef = rootRef.child('businesses'); 


function getDiscoverBarContent(key, cb) { 
    discoverRef.child(key).on('child_added', snap => { 
     let businesRef = businessRef.child(snap.key); 
     businesRef.once('value', cb); 
    }); 
} 

getDiscoverBarContent(businessKey, snap => { 
    var snapVal = snap.val(); 
    $scope.discover.push(snapVal); 
}); 

まず、エラーを防止するために、我々はトップ$scope.discover = []を追加しました。 第2に、FirebaseオブジェクトでforEachを実行できませんでした。代わりに、snap.val()を変数に設定し、それを私の$scope.discoverにプッシュする必要がありました。データは、期待通りにng-repeat="place in discover track by $index"経由で繰り返すことができます。他のアドバイスをありがとうが、これは私の現在のコードのために良い仕事。私は間違いなく他のアドバイスを心に留めておきます。

0

お試しangularfire

アングラーファイアは、角型アプリケーションを構築するための便利なツールをいくつか用意しています。 3つの主要なサービスが含まれています。それぞれのコントローラーに必要なものを注入するだけです。ここで

$firebaseAuth $firebaseObject $firebaseArray

は、あなたが$firebaseArrayを使用する方法である:

const businessKey = '-KQ1hFH0qrvKSrymmn9d'; 
const rootRef = firebase.database().ref(); 
const discoverRef = rootRef.child('discover'); 
const businessRef = rootRef.child('businesses'); 


function getDiscoverBarContent(key, cb) { 
    let myArray = $firebaseArray(discoverRef.child(key)); 
    myArray.$loaded().then(() => { cb(a) }); 
} 

getDiscoverBarContent(businessKey, data => { 
    // ctrl.property = data 
    // $scope.property = data; 
}); 

私は任意の構文間違って持っている場合、私は申し訳ありません。firebaseはすでに最初に初期化されていることを確認してください私はまだ古典的なJS構文を使用しています。

angularfireのドキュメント:https://github.com/firebase/angularfire/blob/master/docs/reference.md

無関係が、あなたは、角度に簡単にページ付け自分でトラブルを保存し、次のライブラリを使用する必要がある場合:https://github.com/deltaepsilon/firebase-paginator

関連する問題