AngularJSサービス


AngularJSでは、独自のサービスを作成することも、多くの組み込みサービスの1つを使用することもできます。


サービスとは何ですか?

AngularJSでは、サービスは、AngularJSアプリケーションで使用可能であり、AngularJSアプリケーションに限定される関数またはオブジェクトです。

AngularJSには約30の組み込みサービスがあります。それらの1つは$location サービスです。

この$locationサービスには、現在のWebページの場所に関する情報を返すメソッドがあります。

$locationコントローラでサービスを使用します。

var app = angular.module('myApp', []);
app.controller('customersCtrl', function($scope, $location) {
    $scope.myUrl = $location.absUrl();
});

$locationサービスは引数としてコントローラーに渡されることに注意してください。コントローラでサービスを使用するには、依存関係として定義する必要があります。


なぜサービスを使用するのですか?

サービスのような多くのサービスでは、オブジェクト$locationのようにすでにDOMにあるオブジェクトを使用できるようですがwindow.location 、少なくともAngularJSアプリケーションにはいくつかの制限があります。

AngularJSは常にアプリケーションを監視し、アプリケーションが変更やイベントを適切に処理するために、AngularJSはオブジェクト$location ではなくサービスを使用することを推奨しwindow.locationます。


$ httpサービス

この$httpサービスは、AngularJSアプリケーションで最も一般的に使用されるサービスの1つです。このサービスはサーバーにリクエストを送信し、アプリケーションにレスポンスを処理させます。

このサービスを使用して$http、サーバーにデータを要求します。

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http) {
  $http.get("welcome.htm").then(function (response) {
    $scope.myWelcome = response.data;
  });
});

この例は、$httpサービスの非常に簡単な使用法を示しています。$httpこのサービスの詳細については、 AngularJSHttpチュートリアルをご覧ください。



$ timeoutサービス

この$timeoutサービスは、AngularJSバージョンの window.setTimeout関数です。

2秒後に新しいメッセージを表示します。

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $timeout) {
  $scope.myHeader = "Hello World!";
  $timeout(function () {
    $scope.myHeader = "How are you today?";
  }, 2000);
});

$ intervalサービス

この$intervalサービスは、AngularJSバージョンの window.setInterval関数です。

毎秒時間を表示します。

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $interval) {
  $scope.theTime = new Date().toLocaleTimeString();
  $interval(function () {
    $scope.theTime = new Date().toLocaleTimeString();
  }, 1000);
});

独自のサービスを作成する

独自のサービスを作成するには、サービスをモジュールに接続します。

次の名前のサービスを作成しますhexafy

app.service('hexafy', function() {
  this.myFunc = function (x) {
    return x.toString(16);
  }
});

カスタムメイドのサービスを使用するには、コントローラーを定義するときに依存関係として追加します。

名前付きのカスタムメイドのサービスを使用してhexafy、数値を16進数に変換します。

app.controller('myCtrl', function($scope, hexafy) {
  $scope.hex = hexafy.myFunc(255);
});

フィルタ内でカスタムサービスを使用する

サービスを作成してアプリケーションに接続すると、そのサービスを任意のコントローラー、ディレクティブ、フィルター、または他のサービス内で使用できます。

フィルタ内でサービスを使用するには、フィルタを定義するときに依存関係としてサービスを追加します。

hexafyフィルタで使用されるサービスmyFormat

app.filter('myFormat',['hexafy', function(hexafy) {
  return function(x) {
    return hexafy.myFunc(x);
  };
}]);

オブジェクトまたは配列からの値を表示するときにフィルターを使用できます。

<ul>
  <li ng-repeat="x in counts">{{x | myFormat}}</li>
</ul>