【发布时间】:2017-12-31 21:35:28
【问题描述】:
我确定这是一个非常常见的问题,但由于某种原因我找不到有效的解决方案。
我有一个非常简单的 Firebase 实时数据库和 Angular 1 设置。我的 html 中有这个指令
<div id="usersListWrapper" ng-controller="UsersListController" ng-init="loadUsersList()">
然后在我的 loadUsersList() 方法中,我调用 Firebase 数据库来获取数据
$rootScope.users = [];
var usersRef = firebase.database().ref('/users');
usersRef.on('value', function(snapshot) {
console.log("loaded users list");
var users = snapshot.val();
updateUsersTable(users);
});
最后,在updateUsersTable(users) 内部,我更新了我的$rootScope.users 变量
var updateUsersTable = function(users) {
$.each(users, function(key, value) {
var user = {
username: key,
...
}
$rootScope.users.push(user);
}
}
但是,即使$rootScope.users 变量正确更新(我使用 Chrome 中的 devtools 进行了验证),html 也不会更新:/
如果这是一个重复的问题,请提前道歉。帮助将不胜感激。
【问题讨论】:
-
听起来你需要运行一个摘要循环。 $scope.$apply(function() { $rootScope.users.push(user);});
-
@LT56 根据我的阅读,手动调用
$apply是不好的。但是,我也尝试过,每当我在列表中添加一些东西时都会引起问题。我一直得到这个:Error: $apply already in progress -
我会将 scope.$apply 放在事件监听器上 b/c AngularJS 不知道事件何时被触发,因为它没有管理它。即: usersRef.on('value', scope.$apply(function () {
});
标签: html angularjs firebase firebase-realtime-database