2016-04-11 3 views
0

私のアプリにビジネスのリストを提供するAngularJSファクトリを作ろうとしています。しかし、私はこれを実行する最初の変数を取得するように思えます。しかし、インターバルが実行された後、私は変数を取得します。AngularJSファクトリはデータを初めて返しませんが、呼び出されたインターバルメソッド後には

私は、ページ内のコントローラ上の最初の実行でこれを取得する:

angular.js:12783 Error: [$injector:undef] Provider 'businessList' must return a value from $get factory method

しかし、私は私のソリューションは、任意の方法を故障していると思いますか?誰かが私をここの正しい方向に向けることができますか?例えば、ここではrootScopeを使用していますか?

私が欲しいのは、訪問時に収集され、自分自身をタイマーで更新する、世界的にアクセス可能なビジネスのリストです。だから私は、laravelバックエンドからの誘惑的な要求をいつも呼んではいけません。私はそのリストでそれを見つけることができます。私の考えです。

工場:

myApp.factory('businessList', ['$interval', '$http', '$rootScope', 
    function($interval, $http, $rootScope) { 
     function bedriftliste() { 
     $http.get('get/allebedrifter') 
      .then(function(result) { 
       bedrifter = result.data; 
       $rootScope.bedrifter = bedrifter; 
      }); 
     return $rootScope.bedrifter; 
    } 
    var bedrifter = bedriftliste(); 
    // start periodic checking 
    $interval(bedriftliste, 5000); 
    return bedrifter; 
} 
]); 

コントローラ

myApp.controller('bsC', ['$rootScope', '$scope', 'businessList', 
        function($rootScope, $scope, businessList) { 
    $scope.allebedrifter = businessList; 
}]);` 
+0

工場が初めてロードされたときに$ rootScope.bedrifterが未定義たので、それは、最初の時点でエラーがスローされた理由のように正常に動作するようです。これは、$ http応答が解決された後にのみ値を持ちます。 – sdfacre

+0

はい、これは動作しません:$ rootScope.bedrifter = bedriftliste(); –

+0

はもちろん動作しません。私が何か答えを出す直前に、あなたが$ httpで他の働くサービスを持っているかどうか分かりますか?はいの場合、なぜこのサービスをこのように書くのですか?ちょうどあなたが$ httpと約束を知っていることを確認する。 – sdfacre

答えて

0

オブジェクトがnullだった場合、私はちょうどhttp.getをすることによって、これを解決しました。

 if (!$rootScope.allebedrifter) { 
     $http.get('get/bedrift/' + $scope.tslug) 
      .then(function(result) { 
       bedriften = result.data; 
       $scope.bedriften = bedriften; 
     }); 

この

関連する問題