我正在編寫一個小型的Angular Web應用程序,並且在加載數據時遇到了問題。我使用Firebase作爲數據源,並發現AngularFire項目聽起來不錯。但是,我無法控制數據的顯示方式。angularfireCollection:知道數據何時被完全加載
起初,我試圖做使用常規的隱含同步:
angularFire(ref, $scope, 'items');
它工作得很好,當我用在我看來,模型$項目中顯示的所有數據。但是,如果數據是從Firebase數據源到達的,則不會以視圖支持的方式進行格式設置,因此我需要在顯示數據之前對數據進行一些其他結構更改。問題是,我不知道數據何時被完全加載。我嘗試將$ watch分配給$ items,但它被稱爲過早。
所以,我提出並試圖用替代angularfireCollection:
$scope.items = angularFireCollection(new Firebase(url), optionalCallbackOnInitialLoad);
的文檔不是很清楚什麼是「optionalCallbackOnInitialLoad」的確,當它被調用,但在嘗試訪問的第一個項目在$ items集合中會拋出一個錯誤(「Uncaught TypeError:無法讀取未定義的屬性'0')。
我嘗試添加一個按鈕,在按鈕的點擊處理我登錄的第一個項目在$項目的內容,並工作:
console.log($scope.items[0]);
它就在那裏!我Firebase中的第一個對象沒有任何錯誤地顯示出來......唯一的問題是我不得不點擊一個按鈕才能到達那裏。
因此,沒有人知道我可以知道當所有的數據已被加載並然後它分配到$ scope變量顯示在我的看法?還是有另一種方式?
我的控制器:
app.controller('MyController', ['$scope', 'angularFireCollection',
function MyController($scope, angularFireCollection) {
$scope.start = function()
{
var ref = new Firebase('https://url.firebaseio.com/days');
console.log("start");
console.log("before load?");
$scope.items = angularFireCollection(ref, function()
{
console.log("loaded?");
console.log($scope.items[0]); //undefined
});
console.log("start() out");
};
$scope.start();
//wait for changes
$scope.$watch('items', function() {
console.log("items watch");
console.log($scope.items[0]); //undefined
});
$scope.testData = function()
{
console.log($scope.items[0].properties); //not undefined
};
}
]);
我的觀點:
<button ng-click="testData()">Is the data loaded yet?</button>
提前感謝!
試試這個:angularFireCollection(參考,功能(數據) {$ = scope.items數據; 的console.log($範圍。 items [0]); }); –