我正在编写一个小型的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]); }); –