Vic*_*ico 17 arrays angularjs firebase ionic-framework
这是我的代码:
var userRef = new Firebase("https://awesome.firebaseio.com/users/");
var tokenRef = userRef.child(key+'/tokens');
tokenRef.once('value', function(snapshot){
var userTokenSync = $firebase(tokenRef);
var userTokens = userTokenSync.$asArray();
console.log(userTokens);
console.log(userTokens[0]);
for(var i=0, len = userTokens.length; i < len; i++) {
console.log(userTokens[i]);
}
console.log('done');
})
Run Code Online (Sandbox Code Playgroud)
这段代码从firebase获取用户的标记,我只想浏览标记数组.
这是控制台给我的东西:

如您所见,我无法访问该阵列.你知道我怎么能这样做吗?
提前致谢.
Fra*_*len 23
欢迎使用异步加载101.
var userTokens = userTokenSync.$asArray();
console.log(userTokens);
console.log(userTokens[0]);
for(var i=0, len = userTokens.length; i < len; i++) {
console.log(userTokens[i]);
}
console.log('done');
Run Code Online (Sandbox Code Playgroud)
此代码段的第一行开始从Firebase加载您的数据.但这种加载可能需要一些时间.由于浏览器不想阻止事物,因此它继续执行脚本.
当浏览器执行您console.log(userTokens);的数据时,很可能还没有加载.所以它只是将对象作为占位符打印到控制台.
当它进入for循环时,数据可能已经或可能尚未从Firebase加载.
在某些时候,您单击了记录旁边的箭头userTokens.到那时,数据已从Firebase加载,控制台显示最新数据.
解决方案由AngularFire以承诺的形式提供.AngularFire承诺在未来的某个时候为您提供数据.如果你有一段代码只能在加载数据时执行,你可以像这样写:
var userTokens = userTokenSync.$asArray();
console.log(userTokens);
console.log(userTokens[0]);
userTokens.$loaded(function(userTokens) {
for(var i=0, len = userTokens.length; i < len; i++) {
console.log(userTokens[i]);
}
console.log('done');
});
console.log('at last line, but not done yet');
Run Code Online (Sandbox Code Playgroud)
请注意,以上是何时使用的不良示例$loaded.由于$loaded只会触发一次,它只会记录数组的初始内容.如果您只是想查看是否/何时加载了数据,那么惯用的方法是添加userTokens到范围:
$scope.userTokens = userTokens;
Run Code Online (Sandbox Code Playgroud)
并将其添加到您的视图/ HTML:
<pre>{{ userTokens | json }}</pre>
Run Code Online (Sandbox Code Playgroud)
AngularFire现在将监视何时以任何方式加载或修改userTokens,并且如果发生这种情况,将告诉AngularJS更新视图.
另见这些:
是的......我们得到了很多这个问题.
| 归档时间: |
|
| 查看次数: |
3478 次 |
| 最近记录: |