如果Firebase中不存在对象,如何显示其他数据?

时间:2017-03-18 15:26:59

标签: javascript angularjs firebase ionic-framework

好吧,我在这个问题上花了太多时间,似乎完全是微不足道的,但不知怎的,我可以对它进行排序。

我正在尝试将对象中的数据显示到我的DOM:

// Listen to every people in our query...
  geoQuery40.on("key_entered", function(key) {
    // ... and look them up by key ...
    restaurantsRef40.child(key).on("value", function(snapshot42) {
      var restaurant40 = snapshot42.val();
      console.log(restaurant40);
      var displayBusinessName = snapshot42.val().name;
      console.log(displayBusinessName);
      var displayBusinessDescription = snapshot42.val().description;
      $timeout(function() {
        if (snapshot42.exists()) {
          $timeout(function() {
      $scope.displayBusinessName = displayBusinessName;
      $scope.displayBusinessDescription = displayBusinessDescription;
    })
    } else {
      $timeout(function() {
      $scope.displayBusinessName = "displayBusinessName";
      $scope.displayBusinessDescription = "displayBusinessDescription";
    })
    }
    })
    });
  });

现在,如果 snapshot42 为空/什么都没有,我想重新定义我展示的内容。它只是不起作用。

这是我的DOM:

<div class="content2" ng-controller="businessPageController">
    <div id="map"></div>
    <div class="profile-info">
                <!-- *profile-image / image profile -->
                <img class="profile-image" src="img/100.jpg">
                <!-- *profile-name / name profile -->
                <h3 class="profile-name">{{displayBusinessName}}</h3>
                <!-- *profile-description / description profile -->
                <span class="profile-description">
                    {{displayBusinessDescription}}
                </span>
        <br /><br />
                </div>
            </div>

任何解决方案?

1 个答案:

答案 0 :(得分:0)

您的问题可能是您在检查值是否存在之前尝试访问该值。即在致电snapshot42.val().name之前致电snapshot42.exists()。如果该值不存在,snapshot42.val()将返回null,一旦您尝试访问其中的属性,就会抛出错误Cannot read property 'name' of null。 虽然您没有提供有关任何错误消息的任何信息,但它只是在黑暗中拍摄。

无论如何,如果上述问题实际上是问题,那么以下更改将解决它们:

geoQuery40.on("key_entered", function(key) {
    // ... and look them up by key ...
    restaurantsRef40.child(key).once("value", function(snapshot42) {
        if(snapshot42.exists()){
            var restaurant40 = snapshot42.val();
            $scope.$apply(function(){
                $scope.displayBusinessName = restaurant40.name;
                $scope.displayBusinessDescription = restaurant40.description;
            });
        }else{
            $scope.$apply(function(){
                $scope.displayBusinessName = "displayBusinessName";
                $scope.displayBusinessDescription = "displayBusinessDescription";
            });
        }
    });
});