Javascript 角度火力推到阵型不起作用

Javascript 角度火力推到阵型不起作用,javascript,arrays,angularjs,firebase,angularfire,Javascript,Arrays,Angularjs,Firebase,Angularfire,我正在开发一个联系人簿应用程序,它可以包含有成员的组。成员有姓名、头衔和电子邮件,但这并不重要。我有下面的控制器,它有一个包含所有组的数组,以及我当前处理的组的索引。此外,还有一个函数用于向特定组添加成员,如下所示: groupControllers.controller('MemberGroupController', ['$scope', '$firebaseArray', '$routeParams', '$location', '$routeParams', function($s

我正在开发一个联系人簿应用程序,它可以包含有成员的组。成员有姓名、头衔和电子邮件,但这并不重要。我有下面的控制器,它有一个包含所有组的数组,以及我当前处理的组的索引。此外,还有一个函数用于向特定组添加成员,如下所示:

   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。谢谢

您只需要在$firebaseObject实例上调用$save。事实上,调用$save可能会破坏一切,因为它会触发推送和$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);
    };
}]);
避免筑巢 请注意,您似乎正在构建一个所谓的嵌套,一个看似直观的层次结构,但会限制您的能力。请阅读的一节以了解更多信息

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

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

对firebase对象调用$save方法以将本地更改推送到firebase。查看以下AngularFire$节省指南:


签出$save方法指南。希望有帮助

谢谢!这很有帮助,但不能解决当前的问题。阵列是否有$save的verison?谢谢!这几乎可以正常工作,但我得到一个错误:Firebase.push失败:第一个参数在属性“groups.JsW25ppMJYYkAezZzyJ.members.asdf”中包含无效的键$id。键必须是非空字符串,并且不能包含。、$、/、[、或]谢谢!但是我使用的是FirebaseArray,正如上面提到的,$save对数组不起作用。在调用firebase对象上的$save函数之前,您可以将数组转换为对象,然后根据函数的要求传入对象。明白了!!!对于firebaseArray,您可以使用适用于firebaseArray的$add方法。看一下firebase阵列的以下指南:当使用$add时,我发现$add不是一个函数。由于members数组位于组的firebasearray内,我是否可以在其上调用.$add?不,您将无法在数组的任何属性上调用$add方法。您需要在firebaseArray函数的返回数组上调用它。在您的情况下,可以像这样调用:$scope.groups.$addparam;where param,while是要插入的新成员。