是否有办法(可能使用规则)在add / push to firebase上复制数据?
我要归档的是当我添加到firebase数组时,我想将数据复制到另一个数组。
所以这是我的firebase结构:
my-firebase: {
items: [ ... ],
queue: [ ... ]
}
这就是我定义服务的方式:
.factory('Service1',['$firebaseArray', function($firebaseArray) {
var items = new Firebase('my-firebase.firebaseio.com/items');
return $firebaseArray(items);
}])
.factory('Service2',['$firebaseArray', function($firebaseArray) {
var queue = new Firebase('my-firebase.firebaseio.com/queue');
return $firebaseArray(queue);
}])
以下是我如何使用它们:
.controller('controller', function($scope, Service1, Service2) {
$scope.save = function() {
Service1.$add({name: "test1"});
Service2.$add({name: "test1"});
}
};
并且希望我只有一个调用而不是重复的调用/代码,但是在两个数组(项目和队列)中都有结果。
非常感谢!
答案 0 :(得分:1)
永远记住,AngularFire是Firebase的JavaScript SDK相对较薄的包装器,有助于将数据绑定到AngularJS视图中。如果您没有尝试绑定并且某些内容不是很明显,那么您通常会在documentation of Firebase's JavaScript SDK中找到更多/更好的信息。
API documentation for $firebaseArray.$add()
对此有帮助。从那里:
var list = $firebaseArray(ref);
list.$add({ foo: "bar" }).then(function(ref) {
var id = ref.key();
console.log("added record with id " + id);
list.$indexFor(id); // returns location in the array
});
因此,$add()
会返回将项目添加到Firebase时履行的承诺。有了这些知识,您可以将同名的子项添加到其他列表中:
var queue = new Firebase('my-firebase.firebaseio.com/queue');
$scope.save = function() {
Service1.$add({name: "test1"}).then(function(ref) {
queue.child(ref.key().set({name: "test1"});
});
}
此最后一个代码段使用常规Firebase参考。由于AngularFire构建于Firebase JavaScript SDK之上,因此它们可以完美地协同工作。事实上:除非您将这些$firebaseArray
绑定到$scope
,否则您最好不要使用AngularFire:
var items = new Firebase('my-firebase.firebaseio.com/items');
var queue = new Firebase('my-firebase.firebaseio.com/queue');
$scope.save = function() {
var ref = queue.push();
ref.set({name: "test1"})
queue.child(ref.key().set({name: "test1"});
}
在我看来,这更容易阅读,因为我们正在跳过一个没有被使用过的图层。即使代码中的其他位置,您将$firebaseArray()
或$firebaseObject()
绑定到相同的数据,它们也会在那里实时更新。
答案 1 :(得分:1)
如果您希望将数据推送到两个路径,您可以简单地覆盖$ add方法并同时将更新应用于第二个路径:
javax.portlet.request