我试图找出如何用angular + firebase做一个简单的CRUD。我开始阅读操作。我有以下数据结构:
鉴于此,我创建了以下规则:
我有一个工作工厂如下:
factory('wordsFactory', function($http){
var factory = {};
var words = [
{content:"hi", definition:"ooo"},
{content:"h3", definition:"ooo222"}
];
factory.getWords = function(){
return words;
//ajax call here
};
factory.addWords = function(){
//something
}
return factory;
})
我修改了它以尝试包含这样的调用:
factory('wordsFactory', function($http){
var factory = {};
var words = [];
var ref = new Firebase('https://my-firebase.firebaseio.com/words');
ref.once('value', function($scope, snapshot) {
$scope.variable = snapshot.val();
words = [
{content: ref.content, definition: ref.definition}
];
});
factory.getWords = function(){
return words;
//ajax call here
};
factory.addWords = function(){
//something
}
return factory;
})
但是,每当我尝试阅读时,我都会:
Error: permission_denied: Client doesn't have permission to access the desired data.
和
FIREBASE WARNING: Exception was thrown by user callback. TypeError: Cannot read property 'val' of undefined
很多事情,我意识到,由于我拥有它的方式,即使它有效,它也只会返回1个值。我现在对此很好,因为我只想弄清楚如何使它工作。我也知道我当前的数据结构可以大大改进,我只是想学习它,但你可以随意提出你认为可以帮助我的任何建议。
我现在主要担心的是我无法阅读。我还要提一下,工厂在没有火基的情况下正常工作,它在主控制器中被调用。
答案 0 :(得分:1)
我认为您的问题与规则有关。
尝试将默认规则替换为以下内容:
{
"rules": {
".read": true,
".write": true
}
}
现在您可以在没有任何错误的情况下进行访问。
答案 1 :(得分:0)
我不确定你是怎么来到这个结构的:
ref.once('value', function($scope, snapshot) {
但是once
回调只为value
事件采用了一个参数。请参阅the relevant Firebase API documentation。
所以你必须把它改成:
ref.once('value', function(snapshot) {
找到另一种方法来获得范围。
要对失败的读取操作进行故障排除,建议您使用Firebase信息中心中的模拟器选项卡。它通常会向您显示操作被拒绝的更好解释。这些详细信息有意不在常规客户中显示。