2016-07-20 19 views
1

で$スコープ変数を変更することはできませんfirebaseデータベースにアクセスする関数内で、特定のエントリの内容を格納するために使用されます。しかし、これを試みると、変数は単純に変更されません。私は 'window.content'を使って同じことをしようとしましたが、 'var content;無駄に。関数内から変数にグローバルにアクセスできるようにする方法はありますか?Firebaseデータベースの機能は、私は次のコードを持っているangularjs

編集 - firebase.databse()。ref fucntionを実行して、alert(snapshot.val())を使用すると、それが動作し、情報がアラートに表示されます。

答えて

1

なしに働いていない試してみてください、しかし、私はこれを行うことで問題を解決することになった:

var app = angular.module("textAngularDemo", ['textAngular']) 
app.controller("demoController", function demoController($scope) { 
    firebase.database().ref('pages/home').on('value', function(snapshot) {  
     test($scope, snapshot.val()); 
    }); 
    $scope.detectChange = function(){ 
     setTimeout(function(){ 
      if ($scope.content) 
      { 
       console.log ($scope.content); 
       } 
      } 
      else 
      { 
       $scope.detectChange(); 
      } 
     }, 1); 
    } 
    function test(scope, variable){ 
     scope.content = variable; 
     $scope.$apply(); 
    } 
    setTimeout(function(){ $scope.detectChange() }, 1); 
}); 

私はこれがあると信じて約束と同じように行動しますが、私は当時どのようにそれらを実装するかについて知りませんでした。もしそうなら、これを「擬似約束」と呼んでください。

1

Firebaseは非同期です(つまり、firebase関数の実行を待つことなく残りのコードが実行されます)。console.logをon関数内に置くと、スコープ変数が実際に変更されたことがわかります。

4

使用$apply()

$apply()は (ブラウザDOMイベント、のsetTimeout、XHRまたはサードパーティのライブラリから例えば)角度フレームワークの外側から角度における発現を実行するために使用される

。例えば

firebase.database() 
    .ref('pages/home') 
    .on('value', function(snapshot) {  
    $scope.$apply(function(){ 
     $scope.content = snapshot.val(); 
    }); 
}); 
+0

これを試した後でも、変数は認識されず、ログに記録されるとnullが返されます。 – WebGavDev

0

は、これらのメソッドのこの

firebase.database().ref('pages/home').on('value', function(snapshot) {  scope.$apply(function(){$scope.content = snapshot.val().content });}); 
関連する問題