AngularJS 服务
AngularJS 支持使用服务架构分离关注点的概念。服务是 JavaScript 函数,只负责执行特定的任务。这使它们成为可维护和可测试的独立实体。控制器和过滤器可以根据需要调用它们。服务通常是使用 AngularJS 的依赖注入机制注入的。
AngularJS 提供了许多内置服务。例如,$http、$route、$window、$location 等。每个服务负责特定的任务,例如 $http 用于进行 ajax 调用以获取服务器数据,$route 用于定义路由信息等。内置服务总是以 $ 符号为前缀。
创建服务有两种方式:
- Factory
- Service
使用工厂方法
在这个方法中,我们首先定义一个工厂,然后给它分配方法。
var mainApp = angular.module("mainApp", []); mainApp.factory('MathService', function() { var factory = {}; factory.multiply = function(a, b) { return a * b } return factory; });
使用服务方法
在这个方法中,我们定义一个服务,然后给它分配方法。我们还为它注入了一个已经可用的服务。
mainApp.service('CalcService', function(MathService) { this.square = function(a) { return MathService.multiply(a,a); } });
例子
下面的例子展示了上述所有指令的使用:
测试AngularJS.htm
<html> <head> <title>Angular JS Services</title> <script src = "https:// ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "mainApp" ng-controller = "CalcController"> <p>Enter a number: <input type = "number" ng-model = "number" /></p> <button ng-click = "square()">X<sup>2</sup></button> <p>Result: {{result}}</p> </div> <script> var mainApp = angular.module("mainApp", []); mainApp.factory('MathService', function() { var factory = {}; factory.multiply = function(a, b) { return a * b } return factory; }); mainApp.service('CalcService', function(MathService) { this.square = function(a) { return MathService.multiply(a,a); } }); mainApp.controller('CalcController', function($scope, CalcService) { $scope.square = function() { $scope.result = CalcService.square($scope.number); } }); </script> </body> </html>
输出
打开文件 测试AngularJS.htm 在网络浏览器中查看结果。