【问题标题】:Using .numChildren() in AngularFire在 AngularFire 中使用 .numChildren()
【发布时间】:2015-04-24 14:00:02
【问题描述】:

我正在尝试在 AngularFire 中使用 .numChildren(),但不确定我是否正确。

function getServiceProviders(serviceId) {
  var serviceProviders = ref.child('services').child(serviceId).child('providers');
  return serviceProviders.numChildren();
}

我收到以下错误:

TypeError: e.numChildren is not a function

不确定这是因为我使用了 Browserify,还是我只是尝试错误地访问 numChildren

感谢任何帮助。提前致谢!

【问题讨论】:

    标签: firebase angularfire


    【解决方案1】:

    您的代码 sn-p 不使用 AngularFire,它只使用 Firebase JavaScript SDK。尽管您的项目无疑使用了 AngularFire,但它与这个问题无关。

    当您查看documentation for the .child() method in the Firebase JavaScript SDK 时,您会看到它返回一个Firebase reference。如果您进一步查看该类,您应该注意到它没有 numChildren 方法。

    numChildren 仅在 DataSnapshot 对象上可用,您可以在任何 on(... 事件处理程序中获得该对象。

    所以:

    serviceProviders.on('value', function(snapshot) {
      console.log(snapshot.numChildren());
    }
    

    由于快照将异步加载,您无法从getServiceProviders 返回子节点的数量。请参阅我对这个问题的回答以获得更广泛的解释:Asynchronous access to an array in Firebase

    【讨论】:

    • 我最初确实将我的 getServicesProvider 包裹在 $firebaseObject 中,这可能就是我将其归档在 Angular Fire 下的原因。你的方法和var getServicesProvider = $firebaseObject(ref.child('services').child(serviceId).child('providers')); getServicesProvider.$loaded().then(function(){ }); 有什么区别?
    • 一般来说:“当你在 AngularFire 中使用 $loaded() 时,你可能做错了什么”。昨天我和思南进行了一次体面的讨论:stackoverflow.com/a/29835485/209103。另外请再次阅读文档的这一部分,因为它最近已被扩展以使异步性质更加清晰:firebase.com/docs/web/libraries/angular/guide/…
    • 我总是看到 Angular Fire API 引用 $loaded,这就是我使用它的原因,但感谢这一点。我会记住这一点的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多