Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ng if-尝试获取我的Firebase数据_Javascript_Angularjs_Ionic Framework_Firebase_Angularfire - Fatal编程技术网

Javascript Ng if-尝试获取我的Firebase数据

Javascript Ng if-尝试获取我的Firebase数据,javascript,angularjs,ionic-framework,firebase,angularfire,Javascript,Angularjs,Ionic Framework,Firebase,Angularfire,我的Firebase中有一个号码,我想在我的ng if中得到它 我尝试了一个快照,我的控制台日志显示了很好的值,但它似乎被ng if忽略了 也许我错过了什么 如果: <div class="item" ng-if="distanceTo(event) < dist "> 假设您的distance to函数工作正常(我无法测试它,所以我模拟了它),问题在于,$scope.dist没有设置 检查正在发生的控制台日志。我怀疑他们没有发生。因此,问题在于线路 userRef.chil

我的Firebase中有一个号码,我想在我的ng if中得到它

我尝试了一个快照,我的控制台日志显示了很好的值,但它似乎被ng if忽略了

也许我错过了什么

如果:

<div class="item" ng-if="distanceTo(event) < dist ">

假设您的
distance to
函数工作正常(我无法测试它,所以我模拟了它),问题在于,
$scope.dist
没有设置

检查正在发生的
控制台日志。我怀疑他们没有发生。因此,问题在于线路

userRef.child($scope.currentUser.authResponse.userID).child("settings").child("distance").once('value', 
我还注意到你不使用分号。这不是一个好的做法,据我所知,这可能是造成问题的原因

var myApp=angular.module('myApp',[]);
myApp.controller('myController',['$scope',',
职能($范围){
$scope.distanceTo=函数(事件){
返回10;
var distance=GreatCircle.distance(event.addressid.geometry.location.H、position.longitude、position.latitude、event.addressid.geometry.location.L);
event.distance=距离;
距离=固定距离(1);
返回距离;
};
/*userRef.child($scope.currentUser.authResponse.userID)。child(“设置”)。child(“距离”)。once('value',函数(snap){
console.log(snap.val())
$scope.dist=snap.val()
console.log($scope.dist)
});
*/
}
]);
.item{
高度:50px;
宽度:50px;
背景颜色:绿色;
}
输入{
宽度:300px;
}

问题在于,Angular不知道Firebase侦听器何时更新。您有两个选项:使用
$timeout
(不推荐),或使用AngularFire(高度推荐)

使用
$timeout
可以执行以下操作:

.controller('MyCtrl', function($scope, $timeout) {
  var ref = new Firebase('<my-firebase-app>');
  // get the user
  $scope.currentUser = ref.getUser();
  var userRef = ref.child($scope.currentUser.uid).child("settings/distance");
  userRef.on('value', function(snap) {
    $timeout(function() {
      $scope.dist = snap.val();
    });
  });
});
.controller('MyCtrl',函数($scope,$timeout){
var ref=新火基(“”);
//获取用户
$scope.currentUser=ref.getUser();
var userRef=ref.child($scope.currentUser.uid).child(“设置/距离”);
userRef.on('value',函数(snap){
$timeout(函数(){
$scope.dist=snap.val();
});
});
});
使用AngularFire,这要容易得多:

angular.module('app', ['firebase']) // include AngularFire
.controller('MyCtrl', function($scope, $firebaseObject) {
  var ref = new Firebase('<my-firebase-app>');
  $scope.dist = $firebaseObject(ref);
});
angular.module('app',['firebase'])//包括AngularFire
.controller('MyCtrl',函数($scope,$firebaseObject){
var ref=新火基(“”);
$scope.dist=$firebaseObject(ref);
});

要开始运行并为自己节省大量时间和痛苦:)

能否将
距离的代码添加到
?我的意思是,把它添加到你的问题中。$scope.distanceTo=function(event){var distance=GreatCircle.distance(event.addressid.geometry.location.H,position.longitude,position.latitude,event.addressid.geometry.location.L)event.distance=distance=distance=distance.toFixed(1)返回距离};但是当我用一个数字替换“dist”时,它的工作…正在发生
console.log(snap.val())
吗?我在console log中有一个很好的数字…谢谢你的回答,但是我如何创建对我路径的引用:userRef.child($scope.currentUser.authResponse.userID)。child(“设置”).child(“距离”)?如果你经过身份验证,您可以通过调用
ref.getAuth()
来获取用户。我更新了我的答案。我的意思是使用AngularFire,如果它更容易,我想尝试一下!:)你完全应该!AngularFire是一组用于同步数据收集的服务。每个服务只接收一个Firebase引用,因此您可以按照通常的方式创建引用。除了你不必自己创造听众之外,AngularFire会为你解决这个问题。它也得到了Firebase的官方支持,由Firebase工程师开发。你不需要参考AngularFire。您使用常规Firebase SDK进行引用,然后将其传递给AngularFire。