在AngularJS中更新工厂时更新范围变量

时间:2016-10-17 14:45:30

标签: javascript angularjs ionic-framework firebase firebase-realtime-database

我是AngularJS的新手,目前正在使用Google Firebase作为我的实时应用。我创建了一个工厂" Friends"它使用以下代码实时检查我的Firebase数据库:

$scope.friends

在我的控制器中,我将.getFriends()变量设置为我的工厂类$scope.friends = friendsFactory.getFriends(); 方法。这很好用,我的页面正确显示所有朋友。

$apply

但是,一旦我的工厂更新,这些更改就不会反映在我的范围变量和视图上。我已尝试使用$watch,{{1}}等,但我无法弄清楚如何确保我的范围和视图在工厂发布后立即更新。现在,每次我导航到不同的页面并返回时,只会显示更改。它们不会实时更新。任何人都可以帮我完成这个吗?非常感谢!

2 个答案:

答案 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;