3

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つの値しか返さないことに気づきました。私はそれを機能させる方法を理解したいだけなので、今はそれで大丈夫です。また、現在のデータ構造が大幅に改善される可能性があることも知っています。これも学習のために行っただけですが、役立つと思われるものは何でも自由に提案してください。

今の私の最大の懸念は、それが読めないことです。また、ファクトリは firebase がなくても正常に動作し、メイン コントローラーで呼び出されていることにも言及する必要があります。

4

2 に答える 2

1

あなたの問題はRULESに関連していると思います。

デフォルトの RULES を以下に置き換えてみてください。

{
  "rules": {    
     ".read": true,
     ".write": true
  }
}

これで、エラーなしでアクセスできます。

于 2016-10-29T08:15:22.130 に答える
0

どのようにしてこの構造にたどり着いたのかわかりません:

ref.once('value', function($scope, snapshot) {

ただし、コールバックはイベントonceに対して 1 つの引数しか取りません。関連する Firebase API ドキュメントvalueを参照してください。

したがって、次のように変更する必要があります。

ref.once('value', function(snapshot) {

そして、そこにスコープを取得する別の方法を見つけてください。

失敗した読み取り操作のトラブルシューティングには、Firebase ダッシュボードのシミュレーター タブを使用することをお勧めします。通常、操作が拒否された理由のより良い説明が表示されます。この詳細情報は、通常のクライアントでは意図的に表示されません。

于 2015-05-25T03:34:56.007 に答える