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>