好吧,我在这个问题上花了太多时间,似乎完全是微不足道的,但不知怎的,我可以不对它进行排序。
我正在尝试将对象中的数据显示到我的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>
任何解决方案?
答案 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";
});
}
});
});