AngularFire推送到阵列不起作用

时间:2015-06-23 16:04:29

标签: javascript arrays angularjs firebase angularfire

我正在开发一个联系簿应用程序,可以在其中包含成员的组。会员有姓名,职务和电子邮件,但这并不重要。我有跟随控制器,其中包含所有组的array,以及我正在处理的组的索引。此外,还有一个函数可以将成员添加到特定组,如下所示:

   groupControllers.controller('MemberGroupController', ['$scope', '$firebaseArray', '$routeParams', '$location', '$routeParams', function($scope, $firebaseArray, $routeParams, $location, $routeParams) {
        $scope.groups = $firebaseArray(ref);
        $scope.whichGroup =  $routeParams.groupId;
        this.addToGroup = function(member){
            $scope.groups[$scope.whichGroup].members.push(member);
            $scope.groups[$scope.whichGroup].members.$save();
        };
    }]);

我知道addToGroup函数正在获取成员,因为它将正确的成员记录到控制台。出于某种原因,当我这样做时,实际上并没有将成员添加到firebase。谢谢!

2 个答案:

答案 0 :(得分:0)

您只需在$save个实例上调用$firebaseObject即可。实际上,对$save的调用可能会破坏事情,因为它会在push$save之间触发潜在的竞争条件。

更新

这将有效:

groupControllers.controller('MemberGroupController', ['$scope', '$firebaseArray', '$routeParams', '$location', '$routeParams', function($scope, $firebaseArray, $routeParams, $location, $routeParams) {
    $scope.groups = $firebaseArray(ref);
    $scope.whichGroup =  $routeParams.groupId;
    this.addToGroup = function(member){
        ref.child('groups').child($scope.whichGroup).child('members').push(member);
    };
}]);

避免筑巢

请注意,您似乎正在构建一个所谓的" nest",一个看似直观的层次结构,但会限制您的界限。阅读Firebase documentation on structuring data部分以了解有关此内容的更多信息。

考虑将群组成员与其他元数据分开:

groups
  -Jy32724372
    name: "Group 1"
  -Jy46728671 
    name: "Group 2"
groups_members:
  -Jy32724372
    twitter:3247423678
    email:23478101
    anonymous:23054389
  -Jy46728671 
    email:23478101
    anonymous:45764357

答案 1 :(得分:0)

在firebase对象上调用$ save方法,将本地更改推送到firebase。查看以下AngularFire $ save指南: https://www.firebase.com/docs/web/libraries/angular/guide/synchronized-objects.html#section-api-summary

查看$ save方法指南。希望,这有助于!!!