使用 angularfire 将 push/add 上的数据复制到 firebase
Duplicate data on push/add to firebase using angularfire
有没有办法(可能使用规则)将 add/push 上的数据复制到 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"});
}
};
并希望我进行一次调用而不是重复调用 call/code 但在两个数组(项目和队列)中都有结果。
非常感谢!
永远记住,AngularFire 是 Firebase JavaScript SDK 的一个相对薄的包装器,有助于将数据绑定到您的 AngularJS 视图中。如果您不尝试绑定并且某些事情不是很明显,您通常会在 documentation of Firebase's JavaScript SDK.
中找到 more/better 信息
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()
returns 当项目被添加到 Firebase 时履行的承诺。有了这些知识,您可以将 same-named child 添加到另一个列表:
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()
绑定到相同的数据,它们也会在 real-time 中更新。
弗兰克的回答很权威。这里的另一个想法是 AngularFire 非常 extensible.
如果你想将数据推送到两个路径,你可以简单地覆盖 $add 方法并同时将更新应用到第二个路径:
app.factory('DoubleTap', function($firebaseArray, $q) {
var theOtherPath = new Firebase(...);
return $firebaseArray.$extend({
$add: function(recordOrItem) {
var self = this;
return $firebaseArray.prototype.$add.apply(this, arguments).then(function(ref) {
var rec = self.$getRecord(ref.key());
var otherData = ...do something with record here...;
return $q(function(resolve, reject) {
theOtherPath.push(rec.$id).set(otherData);
});
});
}
});
});
有没有办法(可能使用规则)将 add/push 上的数据复制到 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"});
}
};
并希望我进行一次调用而不是重复调用 call/code 但在两个数组(项目和队列)中都有结果。
非常感谢!
永远记住,AngularFire 是 Firebase JavaScript SDK 的一个相对薄的包装器,有助于将数据绑定到您的 AngularJS 视图中。如果您不尝试绑定并且某些事情不是很明显,您通常会在 documentation of Firebase's JavaScript SDK.
中找到 more/better 信息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()
returns 当项目被添加到 Firebase 时履行的承诺。有了这些知识,您可以将 same-named child 添加到另一个列表:
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()
绑定到相同的数据,它们也会在 real-time 中更新。
弗兰克的回答很权威。这里的另一个想法是 AngularFire 非常 extensible.
如果你想将数据推送到两个路径,你可以简单地覆盖 $add 方法并同时将更新应用到第二个路径:
app.factory('DoubleTap', function($firebaseArray, $q) {
var theOtherPath = new Firebase(...);
return $firebaseArray.$extend({
$add: function(recordOrItem) {
var self = this;
return $firebaseArray.prototype.$add.apply(this, arguments).then(function(ref) {
var rec = self.$getRecord(ref.key());
var otherData = ...do something with record here...;
return $q(function(resolve, reject) {
theOtherPath.push(rec.$id).set(otherData);
});
});
}
});
});