虽然AngularJS提过了很多有用的服务,但是如果你要创建一个很棒的应用,你可能还是要写自己的服务。你可以通过在模块中注册一个服务工场函数,或者通过Modeul#factory api或者直接通过模块配置函数中的$provide api来实现。
所有的服务都符合依赖注入的原则。它们用一个唯一的名字将自己注册进AngularJS的依赖注入系统(injector),并且声明需要提供给工场函数的依赖。它们的依赖在测试中可以是虚拟的,这使得它们能很好地被测试。formatDate
注册服务
要注册服务,你首先要有一个包含该服务的模块。然后你就能通过模块的api或者使用模块配置函数中的$provide服务来注册你的服务了。下面的伪代码显示了这两种方法。
使用angular.Module api:
var myModule = angular.module('myModule', []); myModule.factory('serviceId', function() { var shinyNewServiceInstance; //factory function body that constructs shinyNewServiceInstance return shinyNewServiceInstance; });
使用$provide服务:
ngular.module('myModule', [], function($provide) { $provide.factory('serviceId', function() { var shinyNewServiceInstance; //factory function body that constructs shinyNewServiceInstance return shinyNewServiceInstance; }); });
依赖
服务不仅可以被依赖,还可以有自己的依赖。依赖可以在工场函数的参数中指定。参阅AngularJS的依赖注入系统,和使用依赖的数组表示法和$inject属性来让依赖表示精简化。
下面是一个很简单的服务的例子。这个服务依赖于$window服务(会被当成参数传递给工场函数),并且只是个函数。这个服务的任务是存储所有的通知;在第三个通知以后,服务会用window的alert来输出所有的通知
angular.module('myModule', [], function($provide) { $provide.factory('notify', ['$window', function(win) { var msgs = []; return function(msg) { msgs.push(msg); if (msgs.length == 3) { win.alert(msgs.join("\n")); msgs = []; } }; }]);
实例化AngularJS的服务
所有服务都是延迟实例化的。这意味着所有的服务只有在需要时,或者被依赖时才会实例化。换句话说,AngularJS不会实例化服务,除非被要请求了或者被应用直接或间接依赖了。
作为单例的服务
最好,要注意的是所有AngularJS服务都是单例的。这意味着在每一个注入器中都只有一个需要的服务的实例。因为AngularJS极度讨厌全局的东西,所以是可以创建多个注入器的,并且每个住一起有自己的服务实例。但这种情况很少,除非在测试中,这样的特性才极度重要。
一个简单的例子:
<!DOCTYPE html> <html lang="en" ng-app="ionicServiceApp"> <head> <meta charset="UTF-8"> <title>注册自己的service</title> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <meta id="viewport" name="viewport" content="width=320,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"/> <meta name="apple-mobile-web-app-capable" content="yes"/> <meta name="apple-mobile-web-app-status-bar-style" content="black"/> <meta content="telephone=no" name="format-detection"/> <title>PoPoverTest</title> <link rel="stylesheet" href="../../Ionic/css/ionic.min.css"/> <script src="../../Ionic/js/ionic.bundle.min.js"></script> <script> var app = angular.module("ionicServiceApp", ['ionic'], function ($provide) { $provide.factory("notify", ["$window", "$timeout","$http", function (win, timeout,$http) { return { attribute: function (msg) { return $http.get('/api/user'); } } }]) }); app.controller('serviceCtrl', ['$scope', '$log','$window', 'notify', function ($scope, $log,win, notify) { $scope.data=notify.attribute("21").success(function(data,status){ $log.log(data); }).error(function(data,status){ win.alert(data); }); $log.log("34432"); }]); </script> </head> <body> <div ng-controller="serviceCtrl"> </div> </body> </html>
相关推荐
总的来说,AngularJS的`$http`服务是前端与Web服务器通信的核心工具,结合适当的后端API设计,可以实现数据的获取、创建、更新和删除等CRUD操作。通过学习和实践这些概念,开发者可以构建出强大的Web应用程序。
本教程将引导你逐步入门AngularJS,通过创建一个简单的项目来理解其核心概念。在我们的项目中,我们将涵盖网络请求封装、模拟Android的toast效果以及前台数据MD5加密。 1. **AngularJS基本概念** - **模块(Module...
$http服务是AngularJS中非常常用的内置服务之一,它提供了对HTTP协议的封装,能够简化从Web服务器获取数据的过程。开发者可以使用$http服务发出GET、POST、PUT、DELETE等HTTP请求,并处理从服务器返回的数据。在发送...
在本文中,我们将深入探讨如何基于AngularJS实现创建自定义表单的动态功能。AngularJS,作为一款强大的前端JavaScript框架,被广泛应用于构建交互式的Web应用程序。它以其数据绑定、依赖注入和模块化的特性,使得...
AngularJS 是一款强大的前端JavaScript框架,由Google维护,主要用于构建单页应用(SPA,Single ..."Hello World"只是AngularJS之旅的第一步,随着学习的深入,你会发现它能帮助你构建出功能强大、响应迅速的Web应用。
创建属于自己的AngularJS框架,实际上是指深入理解AngularJS的核心原理并尝试构建一个类似功能的框架。这不仅对理解AngularJS框架大有裨益,同时也是一种提升JavaScript编程能力的有效方式。这个过程中会涉及的知识...
- **文本和属性绑定**:使用`$interpolate`服务在编译过程中绑定文本和属性,AngularJS会检测匹配到的文本和属性值是否包含内嵌表达式。 - **SVG元素的特例**:由于SVG DOM API的限制,某些属性不能直接使用绑定语法...
工厂是AngularJS中创建服务的一种方式,它允许你定义一个返回值,这个返回值会被注入到需要的地方。你可以定义一个`QueryFactory`来处理数据获取和查询逻辑。 10. **指令扩展**: AngularJS的指令系统允许你扩展...
双向数据绑定是AngularJS的核心特性之一,它使得模型和视图之间的数据同步变得极其简单。依赖注入机制则允许模块之间松散耦合,提高代码的可测试性和可维护性。指令系统扩展了HTML,使我们可以创建自定义的DOM元素和...
AngularJS的核心特性包括双向数据绑定、依赖注入、指令系统、过滤器和服务等。例如,双向数据绑定使得视图与模型之间的数据同步变得极其简单,而依赖注入则允许开发者轻松管理组件间的依赖关系,提高代码的可测试性...
开发者无需关心对象如何创建和管理,只需声明所需的服务,框架就会自动提供。 **3. MVC架构:** AngularJS遵循Model-View-Controller(MVC)模式,分离了业务逻辑、视图呈现和用户交互。这有助于代码的组织和可维护...
版 次:1页 数:348字 数:448000印刷时间:2014-10-1开 本:16开纸 张:胶版纸印 次:1包 ...第10章 创建为全球用户服务的AngularJS应用 第11章 开发健壮的AngularJS应用 第12章 打包和部署AngularJS Web应用 索引
1. **双向数据绑定**:AngularJS 的核心特性之一是双向数据绑定,它使得模型(model)和视图(view)之间的数据保持同步。任何一方的改变都会立即反映到另一方,大大简化了开发者的工作。 2. **指令系统**:AngularJS ...
2. 数据绑定:AngularJS的核心特性之一,实现了视图与模型之间的双向绑定,即模型的变化会自动反映到视图,反之亦然。 3. 指令:AngularJS扩展了HTML,通过自定义指令(如ng-repeat、ng-if)来增强DOM操作,使动态...
自定义服务可以通过`factory`、`service`、`provider`等方式创建。 **指令(Directive)**: 指令是AngularJS的一个创新特性,它们扩展了HTML,让DOM元素具备更丰富的行为。常见的内置指令有`ngRepeat`(用于迭代...
4. **服务**:AngularJS 的服务是一种可注入的对象,可以用来封装和共享代码,如 $http 服务用于与服务器通信,$rootScope 服务则是应用范围内的全局作用域。 5. **依赖注入**:AngularJS 的依赖注入机制简化了组件...
5. **项目模板**:提供了AngularJS项目的创建向导,可以快速搭建起一个标准的AngularJS应用结构。 6. **集成测试**:与 Karma 集成,支持单元测试和端到端测试,方便进行自动化测试。 7. **资源管理**:对...
2. **组件化**:AngularJS 1.5引入了组件化概念,使得创建可复用的UI部件变得更加简单。1.5.8版本进一步优化了组件的生命周期和属性绑定,使得组件更易于理解和维护。 3. **控制器**:在1.5.8版本中,控制器仍然...
通过在控制器或其他服务中声明依赖,AngularJS会自动注入所需的服务实例,降低了代码间的耦合度,提高了可测试性。 **4. 指令** AngularJS的指令扩展了HTML,使其能够表达更多的业务逻辑。例如,`ngRepeat`用于...
├最新AngularJS开发宝典—第070讲 spa项目的server层分析与使用factory创建服务.mp4 ├最新AngularJS开发宝典—第071讲 多个控制器共享服务server数据的处理实例.mp4 ├最新AngularJS开发宝典—第072讲 使用service...