我是AngularJS的新手,目前正在使用Google Firebase作为我的实时应用。我创建了一个工厂" Friends"它使用以下代码实时检查我的Firebase数据库:
$scope.friends
在我的控制器中,我将.getFriends()
变量设置为我的工厂类$scope.friends = friendsFactory.getFriends();
方法。这很好用,我的页面正确显示所有朋友。
$apply
但是,一旦我的工厂更新,这些更改就不会反映在我的范围变量和视图上。我已尝试使用$watch
,{{1}}等,但我无法弄清楚如何确保我的范围和视图在工厂发布后立即更新。现在,每次我导航到不同的页面并返回时,只会显示更改。它们不会实时更新。任何人都可以帮我完成这个吗?非常感谢!
答案 0 :(得分:0)
因为,你只能在开始时获得一次列表。
有必要在$scope.$apply
部分制作on
,但在工厂进行是不对的。
尝试使用angularfire
快速解决方案,将起作用:
angular.module('App')
.factory('friendsFactory', function(){
var friends = [];
var friendshipRef = firebase.database().ref('friendships');
friendshipRef.on('value', function(snapshot){
$timeout(function () {
//etc.. updates friends array
});
});
return{
friends: friends,
//etc
}
在控制器中:
$scope.friends = friendsFactory.friends;
答案 1 :(得分:0)
你应该使用angularfire执行此操作,它在firebase数据库,模型和视图之间进行三向绑定。
1.在您的项目中包含angularfire。
2.根据此更新您的工厂,您不需要做任何事情。每当在firebase数据库中的friendships
节点上更新数据时,它将通知angularfire,angularfire将更新局部变量并调用$scope.$apply
,因此,视图也将更新。
// factory
angular.module('App', ['firebase'])
.factory('friendsFactory', function($firebaseArray){
var friendshipRef = firebase.database().ref('friendships');
return {
friends: $firebaseArray(friendshipRef)
}
});
// controller
$scope.friends = friendsFactory.friends;