作者:阳光下微醺的我 | 来源:互联网 | 2023-05-17 10:48
1> Sinan Bolel..:
我有一些建议可能会有所帮助:
查看Firebase查询文档.特别,
.orderByChild()
.equalTo()
您可以结合使用查询.$ref()
来获取所需的记录.
例
看看这个有效的PLNKR示例.
我在我的一个公开Firebase实例中复制了您的数据.
您正在寻找的查询是 seriesCollectionRef.orderByChild("name").equalTo(seriesName)
如果在输入中输入' Avatar: The Last Airbender
'并单击"查找",您将获得匹配的系列对象.
在我的示例中,我扩展了$firebaseArray
服务以包括按名称查找特定系列的方法.
请参阅有关扩展AngularFire服务的文档.
您可以在不扩展服务的情况下完成相同的操作,请参阅最后一个代码段.
工厂
app.factory('SeriesFactory', function(SeriesArrayFactory, fbUrl){
return function(){
var ref = new Firebase(fbUrl+'/series');
return new SeriesArrayFactory(ref);
}
});
app.factory('SeriesArrayFactory', function($firebaseArray, $q){
return $firebaseArray.$extend({
findSeries:function(seriesName){
var deferred = $q.defer();
// query by 'name'
this.$ref().orderByChild("name").equalTo(seriesName).once("value", function(dataSnapshot){
if(dataSnapshot.exists()){
deferred.resolve(dataSnapshot.val());
} else {
deferred.reject("Not found.");
}
});
return deferred.promise;
}
});
});
调节器
app.controller('HomeController',function($scope, SeriesFactory, fbUrl) {
$scope.seriesName = '';
$scope.findSeries = function() {
console.log("Finding series with name:'",$scope.seriesName,"'");
var seriesCollection = new SeriesFactory();
seriesCollection.findSeries($scope.seriesName).then(function(data){
console.log("Found",data);
$scope.series = data;
}).catch(function(error){
console.warn(error);
});
};
});
没有扩展服务
如果您不使用工厂,这就是控制器功能的样子:
$scope.findSeriesWithoutFactory = function() {
var seriesRef = new Firebase(fbUrl+'/series');
var seriesCollection = $firebaseArray(seriesRef);
seriesCollection.$ref().orderByChild("name").equalTo($scope.seriesName).once("value", function(dataSnapshot){
var series = dataSnapshot.val();
if(dataSnapshot.exists()){
console.log("Found", series);
$scope.series = series;
} else {
console.warn("Not found.");
}
});
};
规则
注意:请务必注意,您应该添加".indexOn":"name"
Firebase规则,以便查询高效运行.像这样:
请参阅Firebase 安全和规则指南的索引数据部分.
"yourfirebaseapp": {
".read": "...",
".write": "...",
"series": {
".indexOn": "name"
}
}
希望有所帮助!