Firebase.once 不是 运行 页面未首次加载时的回调
Firebase.once not running callback when page isn't first loaded
我的 Ionic 应用程序有一个视图,它只显示一个 select 下拉菜单,然后提示用户输入一个数字。然后将该号码保存到该特定用户的 object 英里数 object,键是 selected 选项,值是输入的号码。这是控制器的代码并查看。
控制器:
// Get who is logged in
$scope.user = facebook.get();
// Array of airlines
var airRef = ref.child("airlines");
$scope.airlines = $firebaseArray(airRef);
console.log($scope.airlines);
$scope.selectedAir = {};
$scope.miles = {};
// Add program to user
$scope.addProgram = function () {
if(jQuery.isEmptyObject($scope.user)) {
var authData = ref.getAuth();
var theUser = ref.child("users").child(authData.uid);
var selected = {};
theUser.child("miles").child($scope.selectedAir.name.$id).once("value", function(snapshot) {
console.log("apples");
var exist = snapshot.exists();
if(!exist) {
selected[$scope.selectedAir.name.$id] = $scope.miles.num;
theUser.child("miles").update(selected);
$state.go("app.saved");
} else {
var alertPopup = $ionicPopup.alert({
title: 'Oops!',
template: "You already created this airline! Go to the 'Add Ticket' page to add more points."
});
alertPopup.then(function(res) {
console.log("You already created this airline! Go to the 'Add Ticket' page to add more points.");
});
}
})
} else {
var theUser = ref.child("users").child($scope.user.id);
var selected = {};
theUser.child("miles").child($scope.selectedAir.name.$id).once("value", function(snapshot) {
var exist = snapshot.exists();
if(!exist) {
selected[$scope.selectedAir.name.$id] = $scope.miles.num;
theUser.child("miles").update(selected);
$state.go("app.saved");
} else {
var alertPopup = $ionicPopup.alert({
title: 'Oops!',
template: "You already created this airline! Go to the 'Add Ticket' page to add more points."
});
alertPopup.then(function(res) {
console.log("You already created this airline! Go to the 'Add Ticket' page to add more points.");
});
}
})
}
}
查看:
<ion-view view-title="Add a Program">
<ion-nav-buttons side="left">
<button class="button back-button buttons button-clear header-item" ng-click="goBack()">
<i class="icon ion-ios-arrow-back"></i>
</button>
</ion-nav-buttons>
<ion-content class="padding">
<div class="list marginZeroA paddingTL width80">
<p class="mainText"> </p>
<div class="list">
<label class="item item-input item-select">
<div class="input-label">
</div>
<select ng-model="selectedAir.name" ng-options="airline.$id for airline in airlines">
</select>
</label>
</div>
<label class="item item-input loginInputs">
<input style="color:black"ng-model="miles.num" class="milesPoints" type="number" min="0" max="10000000"
placeholder="30000" ng-click="revealInput(1)">
</label>
<button class="button button-outline button-calm loginButton
saveTicket" ng-click="addProgram()" disabled> Add </button>
</div>
</ion-content>
</ion-view>
当我加载到该特定视图时,该应用程序运行良好,但如果我像通常那样从登录页面开始,它将无法运行。
如果我在这里提供了错误的 child id:
.child($scope.selectedAir.name.$id).once("value",
我会收到一个控制台错误,告诉我它错了,所以我知道它正在尝试 运行,但是当传递正确的 child id 时,什么也没有发生。没有回调,没有错误捕获。谢谢
找到我的问题:
当 ref.once('value', ... )
或 ref.update( ... )
等 Firebase 函数既不执行任何内部命令也不抛出错误(在错误回调中捕获)时,很可能由于 Firebase.goOffline()
调用,您的应用程序未连接到 Firebase。这是我的情况,我在另一个视图中调用了它,当我切换视图时,从未调用 Firebase.goOnline()
来重新打开连接。
我的 Ionic 应用程序有一个视图,它只显示一个 select 下拉菜单,然后提示用户输入一个数字。然后将该号码保存到该特定用户的 object 英里数 object,键是 selected 选项,值是输入的号码。这是控制器的代码并查看。
控制器:
// Get who is logged in
$scope.user = facebook.get();
// Array of airlines
var airRef = ref.child("airlines");
$scope.airlines = $firebaseArray(airRef);
console.log($scope.airlines);
$scope.selectedAir = {};
$scope.miles = {};
// Add program to user
$scope.addProgram = function () {
if(jQuery.isEmptyObject($scope.user)) {
var authData = ref.getAuth();
var theUser = ref.child("users").child(authData.uid);
var selected = {};
theUser.child("miles").child($scope.selectedAir.name.$id).once("value", function(snapshot) {
console.log("apples");
var exist = snapshot.exists();
if(!exist) {
selected[$scope.selectedAir.name.$id] = $scope.miles.num;
theUser.child("miles").update(selected);
$state.go("app.saved");
} else {
var alertPopup = $ionicPopup.alert({
title: 'Oops!',
template: "You already created this airline! Go to the 'Add Ticket' page to add more points."
});
alertPopup.then(function(res) {
console.log("You already created this airline! Go to the 'Add Ticket' page to add more points.");
});
}
})
} else {
var theUser = ref.child("users").child($scope.user.id);
var selected = {};
theUser.child("miles").child($scope.selectedAir.name.$id).once("value", function(snapshot) {
var exist = snapshot.exists();
if(!exist) {
selected[$scope.selectedAir.name.$id] = $scope.miles.num;
theUser.child("miles").update(selected);
$state.go("app.saved");
} else {
var alertPopup = $ionicPopup.alert({
title: 'Oops!',
template: "You already created this airline! Go to the 'Add Ticket' page to add more points."
});
alertPopup.then(function(res) {
console.log("You already created this airline! Go to the 'Add Ticket' page to add more points.");
});
}
})
}
}
查看:
<ion-view view-title="Add a Program">
<ion-nav-buttons side="left">
<button class="button back-button buttons button-clear header-item" ng-click="goBack()">
<i class="icon ion-ios-arrow-back"></i>
</button>
</ion-nav-buttons>
<ion-content class="padding">
<div class="list marginZeroA paddingTL width80">
<p class="mainText"> </p>
<div class="list">
<label class="item item-input item-select">
<div class="input-label">
</div>
<select ng-model="selectedAir.name" ng-options="airline.$id for airline in airlines">
</select>
</label>
</div>
<label class="item item-input loginInputs">
<input style="color:black"ng-model="miles.num" class="milesPoints" type="number" min="0" max="10000000"
placeholder="30000" ng-click="revealInput(1)">
</label>
<button class="button button-outline button-calm loginButton
saveTicket" ng-click="addProgram()" disabled> Add </button>
</div>
</ion-content>
</ion-view>
当我加载到该特定视图时,该应用程序运行良好,但如果我像通常那样从登录页面开始,它将无法运行。 如果我在这里提供了错误的 child id:
.child($scope.selectedAir.name.$id).once("value",
我会收到一个控制台错误,告诉我它错了,所以我知道它正在尝试 运行,但是当传递正确的 child id 时,什么也没有发生。没有回调,没有错误捕获。谢谢
找到我的问题:
当 ref.once('value', ... )
或 ref.update( ... )
等 Firebase 函数既不执行任何内部命令也不抛出错误(在错误回调中捕获)时,很可能由于 Firebase.goOffline()
调用,您的应用程序未连接到 Firebase。这是我的情况,我在另一个视图中调用了它,当我切换视图时,从未调用 Firebase.goOnline()
来重新打开连接。