gpt4 book ai didi

javascript - AngularFire - $firebaseArray 可以 $add 但不能读取

转载 作者:行者123 更新时间:2023-11-30 10:02:20 25 4
gpt4 key购买 nike

我觉得我一定遗漏了一些非常基本的东西。这是我的部分服务:

angular.module('fire')
.constant('FIREBASE_URI', 'https://___.firebaseio.com/')

.factory('syncArraySvc', function(FIREBASE_URI, $firebaseArray) {

var buildingsUri = FIREBASE_URI + "buildings";
var buildings = $firebaseArray(new Firebase(buildingsUri));
console.log(buildings);

var getBuildings = function() {
return buildings;
};
var addBuilding = function(item) {
buildings.$add(item);
};
return {
getBuildings: getBuildings,
addBuilding: addBuilding
};
});

中间的 console.log 只返回一个空数组。如果我尝试从另一个 Controller 调用 syncArraySvc.getBuildings() 函数,我也会得到一个空数组。 $add(item)syncArraySvc.addBuilding(item) 一样有效。我错过了什么?

最佳答案

如果您查看 $add $firebaseArray,它会创建新项目并将其添加到 $firebaseArray 中,就像我们有 buildings .但是,一旦您将项目添加到“$firebaseArray”,它就不会立即添加。当 $add promise 得到解决时,它就会被添加。

我认为你做的是正确的,只是你需要在 $add promise 成功时调用 syncArraySvc.addBuilding(item) 方法。

要实现这种方法,您需要从服务方法返回一个 promise ,例如

var addBuilding = function(item) {
return buildings.$add(item);
};

然后调用者函数将接受该 promise 并在解决它时,他将调用 syncArraySvc.addBuilding(item) 方法以确保项目已添加到 buildings 数组。

syncArraySvc.addBuilding({foo: "bar"}).then(function(addedItem){
console.log(addedItem);
console.log(syncArraySvc.addBuilding(item)); //this will show you updated list
})

关于javascript - AngularFire - $firebaseArray 可以 $add 但不能读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30943734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com