This Answer did not help这是非常相似的东西。我使用角度1.3.15,使用Firebase 2.2.4和AngularFire 1.1.1。
我有一家工厂要返回对正确Firebase的引用(https://.firebaseio.com
angular.module('MyModule')
.constant('FIREBASE_URL', 'https://xxxxxxxxx.firebaseio.com/');
angular.module('MyModule')
.factory('GetFireBaseObject', function(FIREBASE_URL) {
return {
BaseURL: function() {
return new Firebase(FIREBASE_URL);
},
DataURL: function(Node) {
return new Firebase(FIREBASE_URL + Node);
}
};
}
);
然后控制器正试图从工厂获取数据。
angular.module('MyModule').factory("StoresData", ["$firebaseArray", "GetFireBaseObject",
function($firebaseArray, GetFireBaseObject) {
var StoresData = GetFireBaseObject.DataURL('Stores/');
return {
AllStores: function() {
return $firebaseArray(StoresData);
},
OneStore: function(StoreKey) {
var StoreKeyNo = parseInt(StoreKey);
return $firebaseArray(StoresData.child(StoreKeyNo));
}
};
}
]);
AllStores引用调用将返回所有内容。但是,我没有使用OneStore调用获得记录。我已经验证我的密钥在Firebase结构中是数字的(没有引号),但仍然没有找到记录。
angular.module('MyModule').controller('StoreCtrl', ['$scope', "StoresData",
function ($scope, StoresData) {
$scope.Stores = StoresData.AllStores();
$scope.store = {};
$scope.DeleteStore = function(StoreId) {
$scope.Stores.$remove(StoreId);
};
$scope.SaveStore = function(store) {
store.$id = store.Key; // Integer Value
$scope.Stores.push(store);
$scope.Stores.$save(store);
$scope.store.Key = "";
$scope.store.Description = "";
};
$scope.SelectStore = function(StoreId) {
var OneStore = StoresData.OneStore(StoreId);
$scope.store.Key = OneStore.Key;
$scope.store.Description = OneStore.Description;
};
}
]);
我没有看到调试器或屏幕上返回任何内容。我现在甚至不担心更新,只是想让选择工作。我已经验证HTML正在返回我正在尝试访问的记录的正确密钥。
将OneStore更改为:
OneStore: function(StoreKey) {
var StoresData = GetFireBaseObject.DataURL('Stores/' + StoreKey);
return new $firebaseArray(StoresData);
也不起作用。返回的数据是一个空数组。
答案 0 :(得分:1)
有几种方法可以将子值推送到对象。最简单的是obj[ childName ] = value
,后跟$save()
。
此外,obj.$getRef().child( childName ).set( value );
在处理大型数据集和复杂设置时会很棒。实际上,为了编写数据,您不需要同步对象或数组,因为这些只是将数据绑定到本地Angular特定模型。
对于集合,您应该使用$firebaseArray
,对于表示单个记录的键/值对,您应该使用$firebaseObject
,如指南中所建议的那样。他们都有可用于处理这些独特类型的特定工具。另请注意,应使用$add()
添加应保存回服务器的数据,而不是使用数组原型方法push()
添加。
如果您尝试使用{foo:' bar',baz:' boo'}之类的对象节点并将其转换为$firebaseArray
,那么它就是&#39 ; s仍然被视为一个集合。内部所有数组都在您指定的路径上调用child_added
。因此,在这种情况下,foo
和baz
都会被视为"记录"并添加到数组中作为$value
属性等于其字符串值的对象。 the guide中涵盖了许多类似的技术。