AngularJS tut 10: AngularJS Services
Trong AngularJS, bạn có thể tạo dịch vụ của riêng mình hoặc sử dụng một trong nhiều dịch vụ tích hợp sẵn.
Dịch vụ là gì?
Trong AngularJS, một dịch vụ là một hàm hoặc đối tượng, có sẵn và giới hạn cho ứng dụng AngularJS của bạn.
AngularJS có khoảng 30 dịch vụ tích hợp sẵn. Một trong số đó là $location
dịch vụ.
Các $location
dịch vụ có phương pháp mà trả về thông tin về vị trí của trang web hiện tại:
Thí dụ
Sử dụng $location
dịch vụ trong bộ điều khiển:
var app = angular.module('myApp', []);
app.controller('customersCtrl', function($scope, $location) {
$scope.myUrl = $location.absUrl();
});
Lưu ý rằng $location
dịch vụ được chuyển tới bộ điều khiển dưới dạng đối số. Để sử dụng dịch vụ trong bộ điều khiển, nó phải được định nghĩa là một phụ thuộc.
Tại sao sử dụng Dịch vụ?
Đối với nhiều dịch vụ, như $location
dịch vụ, có vẻ như bạn có thể sử dụng các đối tượng đã có trong DOM, như window.location
đối tượng, và bạn có thể, nhưng nó sẽ có một số hạn chế, ít nhất là đối với ứng dụng AngularJS của bạn.
AngularJS liên tục giám sát ứng dụng của bạn và để nó xử lý các thay đổi và sự kiện đúng cách, AngularJS muốn bạn sử dụng $location
dịch vụ thay vì window.location
đối tượng.
Dịch vụ $ http
Các $http
dịch vụ là một trong những dịch vụ được sử dụng phổ biến trong các ứng dụng AngularJS. Dịch vụ đưa ra yêu cầu tới máy chủ và cho phép ứng dụng của bạn xử lý phản hồi.
Thí dụ
Sử dụng $http
dịch vụ để yêu cầu dữ liệu từ máy chủ:
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http) {
$http.get("welcome.htm").then(function (response) {
$scope.myWelcome = response.data;
});
});
Ví dụ này cho thấy việc sử dụng $http
dịch vụ rất đơn giản . Tìm hiểu thêm về $http
dịch vụ trong Hướng dẫn AngularJS Http .
Dịch vụ $ timeout
Các $timeout
dịch vụ là phiên bản AngularJS’ của window.setTimeout
chức năng.
Thí dụ
Hiển thị một tin nhắn mới sau hai giây:
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $timeout) {
$scope.myHeader = "Hello World!";
$timeout(function () {
$scope.myHeader = "How are you today?";
}, 2000);
});
Dịch vụ $ khoảng thời gian
Các $interval
dịch vụ là phiên bản AngularJS’ của window.setInterval
chức năng.
Thí dụ
Hiển thị thời gian mỗi giây:
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $interval) {
$scope.theTime = new Date().toLocaleTimeString();
$interval(function () {
$scope.theTime = new Date().toLocaleTimeString();
}, 1000);
});
Tạo dịch vụ của riêng bạn
Để tạo dịch vụ của riêng bạn, hãy kết nối dịch vụ của bạn với mô-đun:
Tạo một dịch vụ có tên hexafy
:
app.service('hexafy', function() {
this.myFunc = function (x) {
return x.toString(16);
}
});
Để sử dụng dịch vụ được tạo tùy chỉnh của bạn, hãy thêm nó làm phụ thuộc khi xác định bộ điều khiển:
Thí dụ
Sử dụng dịch vụ tùy chỉnh được đặt tên hexafy
để chuyển đổi một số thành số thập lục phân:app.controller(‘myCtrl’, function($scope, hexafy) {
$scope.hex = hexafy.myFunc(255);
});Hãy tự mình thử »
Sử dụng Dịch vụ Tùy chỉnh Bên trong Bộ lọc
Khi bạn đã tạo một dịch vụ và kết nối nó với ứng dụng của mình, bạn có thể sử dụng dịch vụ đó trong bất kỳ bộ điều khiển, chỉ thị, bộ lọc nào hoặc thậm chí bên trong các dịch vụ khác.
Để sử dụng dịch vụ bên trong bộ lọc, hãy thêm nó dưới dạng phụ thuộc khi xác định bộ lọc:
Dịch vụ hexafy
được sử dụng trong bộ lọc myFormat
:
app.filter('myFormat',['hexafy', function(hexafy) {
return function(x) {
return hexafy.myFunc(x);
};
}]);
Bạn có thể sử dụng bộ lọc khi hiển thị các giá trị từ một đối tượng hoặc một mảng:
Tạo một dịch vụ có tên hexafy
:
<ul>
<li ng-repeat="x in counts">{{x | myFormat}}</li>
</ul>
Hãy tự mình thử »