服務(wù)
什么是服務(wù)?
在 AngularJS 中,服務(wù)是函數(shù)或?qū)ο螅捎糜诓H限于您的 AngularJS 應(yīng)用程序。
AngularJS 有大約 30 個(gè)內(nèi)置服務(wù)。其中之一是 $location
服務(wù)。
$location
服務(wù)有方法可以返回有關(guān)當(dāng)前網(wǎng)頁位置的信息:
實(shí)例
在控制器中使用 $location 服務(wù):
var app = angular.module('myApp', []); app.controller('customersCtrl', function($scope, $location) { $scope.myUrl = $location.absUrl(); });運(yùn)行實(shí)例 ?
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
請注意,$location
服務(wù)作為參數(shù)傳遞到控制器。為了在控制器中使用該服務(wù),必須將其定義為依賴項(xiàng)。
為什么使用服務(wù)?
對于許多服務(wù),如 $location
服務(wù),您似乎可以使用 DOM 中已有的對象(例如 window.location 對象),但它會有一些限制,至少對于您的 AngularJS 應(yīng)用程序來說是這樣。
AngularJS 不斷監(jiān)督您的應(yīng)用程序,為了使其正確處理更改和事件,AngularJS 更喜歡您使用 $location
服務(wù)而不是 window.location 對象。
$http 服務(wù)
$http
服務(wù)是 AngularJS 應(yīng)用程序中最常用的服務(wù)之一。該服務(wù)向服務(wù)器發(fā)出請求,并讓您的應(yīng)用程序處理響應(yīng)。
實(shí)例
使用 $http 服務(wù)從服務(wù)器請求數(shù)據(jù):
var app = angular.module('myApp', []); app.controller('myCtrl', function($scope, $http) { $http.get("welcome.htm").then(function (response) { $scope.myWelcome = response.data; }); });運(yùn)行實(shí)例 ?
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
此例演示了 $http
服務(wù)的非常簡單的用法。請?jiān)?AngularJS Http 教程中了解有關(guān) $http 服務(wù)的更多信息。
$timeout 服務(wù)
$timeout
服務(wù)是 AngularJS 版本的 window.setTimeout
函數(shù)。
實(shí)例
兩秒后顯示新消息:
var app = angular.module('myApp', []); app.controller('myCtrl', function($scope, $timeout) { $scope.myHeader = "Hello World!"; $timeout(function () { $scope.myHeader = "How are you today?"; }, 2000); });運(yùn)行實(shí)例 ?
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
$interval 服務(wù)
$interval
服務(wù)是 AngularJS 版本的 window.setInterval
函數(shù)。
實(shí)例
每秒顯示時(shí)間:
var app = angular.module('myApp', []); app.controller('myCtrl', function($scope, $interval) { $scope.theTime = new Date().toLocaleTimeString(); $interval(function () { $scope.theTime = new Date().toLocaleTimeString(); }, 1000); });運(yùn)行實(shí)例 ?
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
創(chuàng)建您自己的服務(wù)
要創(chuàng)建自己的服務(wù),請將服務(wù)與模塊連接:
創(chuàng)建名為 hexafy
的服務(wù):
app.service('hexafy', function() { this.myFunc = function (x) { return x.toString(16); } });
要使用您的自定義服務(wù),請?jiān)诙x控制器時(shí)將其添加為依賴項(xiàng):
實(shí)例
使用名為 hexafy 的自定義服務(wù)將數(shù)字轉(zhuǎn)換為十六進(jìn)制數(shù)字:
app.controller('myCtrl', function($scope, hexafy) { $scope.hex = hexafy.myFunc(255); });運(yùn)行實(shí)例 ?
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
在過濾器中使用自定義服務(wù)
創(chuàng)建服務(wù)并將其連接到您的應(yīng)用程序后,您可以在任何控制器、指令、過濾器或甚至其他服務(wù)中使用該服務(wù)。
要在過濾器中使用服務(wù),請?jiān)诙x過濾器時(shí)將其添加為依賴項(xiàng):
過濾器 myFormat 中使用的服務(wù) hexafy:
app.filter('myFormat',['hexafy', function(hexafy) { return function(x) { return hexafy.myFunc(x); }; }]);運(yùn)行實(shí)例 ?
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
您可以在顯示對象或數(shù)組中的值時(shí)使用該過濾器:
<ul> <li ng-repeat="x in counts">{{x | myFormat}}</li> </ul>運(yùn)行實(shí)例 ?
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例