HTTPリクエストを使用したAngularJSサービス、オフラインステータス
-
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>
. 所属していません StackOverflow