-1

私はhtmlのfirebaseからデータを返す関数df(stuff、morestuff)を呼び出しています。しかし、関数は非同期関数であるため、データは返されません。何をすべきか??anglejsのhtmlで非同期関数を呼び出す方法

<div>{{ df(stuff, morestuff) }}</div> 


$scope.df = function(stuff, morestuff){ 
    ref.child(stuff).child(morestuff).once('value', function(dataSnap){ 
     return dataSnap.val(); 
    }) 
} 

ここで大いに歓迎されます。

答えて

0

まだロードされていないデータは戻せません。解決策は、コードを「データがロードされたときに...」に置き換えることです。

function(stuff, morestuff){ 
    ref.child(stuff).child(morestuff).once('value', $timeout(function(dataSnap){ 
     $scope.df = dataSnap.val(); 
    })); 
} 

これは、あなたが(代わりにonce()の)on()を使用する場合、それも動作するという利点があり、データが更新されたときに、その場合には、自動的にAngularJSビューを更新します。

+0

おかげでフランク。以前はそのテクニックを使っていましたが、入れ子になったng-repeatの中でその関数を何度も呼びます。私はスコープオブジェクトを行い、値を記入することができました。私は、関数から戻り値を得ることが望まれていました。 – user3527354

+0

残念ながらそれは不可能です。これは非同期にロードされ、ブラウザはデータが戻ってくるのを待つことはできません。 –

+0

はそれを得ました。ありがとう。 – user3527354

0

これはかなり簡単です。変数をバインドして、コントローラでこの変数に必要なものを入力します。

HTML:

​​

コントローラ:

app.controller('appCtrl', ['$scope', function ($scope) { 
    ref.child(stuff).child(morestuff).once('value', function(dataSnap){ 
     $scope.variable = dataSnap 
     // Verify if angular isn't digesting already (procesing changes) 
     if(!$scope.$$phase) { 
      // Angular ain't aware of changes, so we make it do it's cycle. 
      $scope.$apply() 
     } 
    }) 
}]) 
+0

ありがとうAkxe、上記のフランクへのコメントをご覧ください。 – user3527354

関連する問題