【问题标题】:AngularJs error in return value from filter function过滤器函数返回值中的AngularJs错误
【发布时间】:2023-04-01 10:29:01
【问题描述】:

我想过滤 Firebase 路径并查看我的路径中是否存在子节点。
我只想返回具有路径调用“响应”的值。它可以工作,但是当路径没有这个孩子时,它会抛出这个错误:

    firebase.js:283 Uncaught TypeError: Cannot read property '$value' of 
    firebase.js:276 FIREBASE WARNING: Exception was thrown by user callback.
    TypeError: Cannot read property '$value' of undefined

我像这样使用 Firebase-util 和 Angularfire:

    var ref = firebase.database().ref();

    var nc = new firebase.util.NormalizedCollection(
    ref.child('accounts/' + $localStorage.accountId + '/demandes'),
    [ref.child('demandes'), 'widget2']).select('widget2.duree', 'widget2.derniere_modification', 'widget2.reponses', 'widget2.exp', 'widget2.ajout_le', 'widget2.localisation').
    filter(function(data, key, priority) {
      return  data.reponses.$value !== null; // This cause problems !
    }).ref();
    $scope.items = $firebaseArray(nc);

除了return data.reponses.$value !== null; 之外,我该如何以正确的方式进行测试?谢谢

【问题讨论】:

  • 为什么不检查孩子的存在并返回 (data.responses && data.responses.$value !== null)?

标签: angularjs firebase firebase-realtime-database firebase-util


【解决方案1】:

听起来data.responsesundefined,所以你可以像这样检查$value

.filter(function (data, key, priority) {
    return data.responses && data.responses.$value !== null;
}).ref();

这确保在您探测 $value 之前,data 上有一个 responses 字段。

【讨论】:

  • 第二个解决方案仍然让我回到同样的错误,但第一个解决了这个问题,谢谢你的回答@Zach
  • 在您删除第二个代码部分之前,我无法赞成这个答案。您的第一个代码块是我在 cmets 中建议的,应该可以正常工作。但是,在您的第二个示例中,返回 bool && 字符串往往会产生不直观的结果。在此处查看有关逻辑运算符的文档developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 2021-03-05
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多