HTTPリクエストを使用したAngularJSサービス、オフラインステータス

StackOverflow https://stackoverflow.com//questions/25012898

  •  21-12-2019
  •  | 
  •  

質問

私はHTTPリクエストをロードするサービスを持つAngularJSアプリを持っています、それはすべて大丈夫ですが...

最初に私のアプリがオフラインのとき、私は再試行ボタンを使って「オフライン」ページを表示し、アプリをオンラインにすると、データをロードするためのサービスが必要です。

問題は、ボタンをクリックすると何も起こらず、オンラインチェックは正常に機能しますが、Webサービスは呼び出されません。(

私のサービス:

.service('webService', function ($http, $q){
    var defferer = $q.defer()
    var webservice_url = "http://mywebservice_url/";
    $http.get(webservice_url+"?action=get_settings").success(function(data) {
        defferer.resolve(data);
    });
    return defferer.promise;
})
.

私のコントローラー:

.controller('NetworkCtrl', function($scope, $location, $timeout, webService) {
    $("#tryagain-button").click(function(e) {
        e.preventDefault();
        if(checkifonline()) {
            webService.then(function(data) {
                $scope.data = data;
            });
        }
    });
})
.

役に立ちましたか?

解決

まず、コントローラ内のjQueryを使用することは、AngularJSがどのように機能するかは絶対にありません。NG-Clickディレクティブを使用してください。あなたのサービスが正しく実装されたとしても、Angularjsはスコープのモデルの変更について通知されないのでそれは動作しません($適用を使用する必要があるが、NG-Click Directiveに固執するだけです)

second、サービス機能はコンストラクタ機能を取ります。このコンストラクタ内ではHTTPリクエストを作成しています(オフライン)、約束は解決されます。サービスは常に同じ約束を払い戻してから、新しい要求をすることは決してないでしょう。あなたのサービスは次のようになります:

.service('webService', function ($http){
    var webservice_url = "http://mywebservice_url/";
    this.getSettings = function(){
        return $http.get(webservice_url+"?action=get_settings");
    };
})
.

とコントローラ:

.controller('NetworkCtrl', function($scope, $location, $timeout, webService) {
    $scope.onClick = function(){
        webService.getSettings().success(function(data){
            $scope.data = data;
        }
    }
})
.

とHTMLボタン:

<button ng-click="onClick()">reload</button>
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top