Angular 模板无法加载。即使有 $loaded。加载后数据解析
Angular template won't load. Even with $loaded. Data resolves after Load
使用 AngularFire,Angular,Firebase。
我从 Firebase 数据库加载用户列表。我使用 $loaded 来确保它等待数据加载。
我将此列表与另一个 firebase 组数据库进行比较,并将结果推送到两个数组中。
基于 console.logs 数据正确排序。但是,在我的模板中,我得到一个空白页面(我认为这是因为页面在数据排序之前加载)。
想法?
let userLoggedIn = AuthFactory.getUser();
var allUsersArray = $firebaseArray(ConnectFactory.fbUserDb);
var x = firebase.database().ref('groups');
var friendArr = [];
var notFriendArr = [];
allUsersArray.$loaded().then(function(){
angular.forEach(allUsersArray, function(user, i) {
var haveIAdded = x.child(userLoggedIn).child(allUsersArray[i].uid).once('value').then(function (snap) {
if (snap.val() !== null) {
return true;
} else {
return false;
}
});
var haveTheyAdded = x.child(allUsersArray[i].uid).child(userLoggedIn).once('value').then(function (snap) {
if (snap.val() !== null) {
return true;
} else {
return false;
}
});
Promise.all([haveIAdded, haveTheyAdded]).then(function([you, they]) {
if (you && they) {
console.log('We Are Friends', allUsersArray[i]);
friendArr.push(allUsersArray[i]);
} else {
console.log('not a friend ', allUsersArray[i]);
notFriendArr.push(allUsersArray[i]);
}
});
});
$scope.friendList = friendArr;
$scope.notFriendList = notFriendArr;
});
好吧,这次我尝试在尝试回答之前实际阅读问题。 ;-)
当您在 $loaded 承诺中设置 $scope.friendList 和 $scope.notFriendList 时,您的 Promise.all
可能(而且很可能)在调用它们时尚未解析,因为 angular.forEach
在继续执行函数中的下一条语句之前不会等待承诺完成。因此,在尝试设置 $scope 变量之前,您必须构建一个承诺数组并等待它们全部在循环外解析。
allUsersArray.$loaded().then(function(){
var promises = [];
var friendArr = [];
var notFriendArr = [];
angular.forEach(allUsersArray, function(user, i) {
... // Same as before
promises.push(
Promise.all([haveIAdded, haveTheyAdded]).then(function([you, they]) {
if (you && they) {
console.log('We Are Friends', allUsersArray[i]);
friendArr.push(allUsersArray[i]);
} else {
console.log('not a friend ', allUsersArray[i]);
notFriendArr.push(allUsersArray[i]);
}
})
);
});
Promise.all(promises).then(function(){
$scope.friendList = friendArr;
$scope.notFriendList = notFriendArr;
});
});
使用 AngularFire,Angular,Firebase。 我从 Firebase 数据库加载用户列表。我使用 $loaded 来确保它等待数据加载。 我将此列表与另一个 firebase 组数据库进行比较,并将结果推送到两个数组中。 基于 console.logs 数据正确排序。但是,在我的模板中,我得到一个空白页面(我认为这是因为页面在数据排序之前加载)。
想法?
let userLoggedIn = AuthFactory.getUser();
var allUsersArray = $firebaseArray(ConnectFactory.fbUserDb);
var x = firebase.database().ref('groups');
var friendArr = [];
var notFriendArr = [];
allUsersArray.$loaded().then(function(){
angular.forEach(allUsersArray, function(user, i) {
var haveIAdded = x.child(userLoggedIn).child(allUsersArray[i].uid).once('value').then(function (snap) {
if (snap.val() !== null) {
return true;
} else {
return false;
}
});
var haveTheyAdded = x.child(allUsersArray[i].uid).child(userLoggedIn).once('value').then(function (snap) {
if (snap.val() !== null) {
return true;
} else {
return false;
}
});
Promise.all([haveIAdded, haveTheyAdded]).then(function([you, they]) {
if (you && they) {
console.log('We Are Friends', allUsersArray[i]);
friendArr.push(allUsersArray[i]);
} else {
console.log('not a friend ', allUsersArray[i]);
notFriendArr.push(allUsersArray[i]);
}
});
});
$scope.friendList = friendArr;
$scope.notFriendList = notFriendArr;
});
好吧,这次我尝试在尝试回答之前实际阅读问题。 ;-)
当您在 $loaded 承诺中设置 $scope.friendList 和 $scope.notFriendList 时,您的 Promise.all
可能(而且很可能)在调用它们时尚未解析,因为 angular.forEach
在继续执行函数中的下一条语句之前不会等待承诺完成。因此,在尝试设置 $scope 变量之前,您必须构建一个承诺数组并等待它们全部在循环外解析。
allUsersArray.$loaded().then(function(){
var promises = [];
var friendArr = [];
var notFriendArr = [];
angular.forEach(allUsersArray, function(user, i) {
... // Same as before
promises.push(
Promise.all([haveIAdded, haveTheyAdded]).then(function([you, they]) {
if (you && they) {
console.log('We Are Friends', allUsersArray[i]);
friendArr.push(allUsersArray[i]);
} else {
console.log('not a friend ', allUsersArray[i]);
notFriendArr.push(allUsersArray[i]);
}
})
);
});
Promise.all(promises).then(function(){
$scope.friendList = friendArr;
$scope.notFriendList = notFriendArr;
});
});