在angularFire / Firebase中创建和添加数组

时间:2015-03-10 23:18:36

标签: arrays angularjs firebase angularfire

我正在尝试使用angularjs和Firebase构建一个类似于帮助我的同学解决问题的论坛。我还希望人们能够“回复”同学们遇到的具体问题,所以我在angularjs工厂中创建了一个具有许多值的对象,如下所示:

factory.addError = function() {
 factory.errors.$add({
  ...
  replies: []
 });
};

问题在于Firebase不保存占位符空值的参数,例如上面的参数“回复”。我曾尝试将占位符值硬编码到数组中,但这似乎是一个非常不完整的解决方案,而且我自己必须删除Firebase中的数据时遇到了一系列问题。作为参考,这是链接控制器中的代码:

$scope.error.replies.$push({
  name: $scope.replyName,
  message: $scope.replyMessage,
  time: (new Date()).toString(),
  upvote: 0
});

如何将空数组初始化为对象? $ push会正确使用Firebase的命令将其保存到自己的数据集中吗?

1 个答案:

答案 0 :(得分:3)

首先,这里有一些相关的资源和建议:

资源

建议

正如AngularFire API Documentation所说:

  

"有几种强大的技术可以转换$firebaseArray$firebaseObject下载和保存的数据。这些技术只能由熟悉代码的高级Angular用户尝试。"

把所有这些放在一起,你完成了你想做的事情:

实施例

扩展错误$firebaseObject

.factory('Error', function(fbUrl, ErrorFactory) {
  return function(errorKey){
    var errorRef;
    if(errorKey){
      // Get/set Error by key
      errorRef = new Firebase(fbUrl + '/errors/'+errorKey);
    } else {
      // Create a new Error
      var errorsListRef = new Firebase(fbUrl + '/errors');
      errorRef = errorsListRef.push();
    }
    return new ErrorFactory(errorRef);
  }
})

.factory('ErrorFactory', function($firebaseObject){
  return $firebaseObject.$extend({
    sendReply: function(replyObject) {
      if(replyObject.message.isNotEmpty()) {
        this.$ref().child('replies').push(replyObject);
      } else {
        alert("You need to enter a message.");
      }
    }
  });
})

错误控制器

.controller('ErrorController',function($scope, Error) {
  // Set empty reply message
  $scope.replyMessage = '';

  // Create a new Error $firebaseObject
  var error = new Error();
  $scope.error = error;

  // Send reply to error
  $scope.reply = function(){
      error.sendReply({message:$scope.replyMessage});
  }
})

String.prototype.isNotEmpty()

String.prototype.isNotEmpty = function() {
    return (this.length !== 0 && this.trim());
};

(改编自this answer


希望有所帮助!