`

angularjs之创建服务

 
阅读更多

虽然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与web服务器交互

    总的来说,AngularJS的`$http`服务是前端与Web服务器通信的核心工具,结合适当的后端API设计,可以实现数据的获取、创建、更新和删除等CRUD操作。通过学习和实践这些概念,开发者可以构建出强大的Web应用程序。

    AngularJS入门之简单的项目搭建

    本教程将引导你逐步入门AngularJS,通过创建一个简单的项目来理解其核心概念。在我们的项目中,我们将涵盖网络请求封装、模拟Android的toast效果以及前台数据MD5加密。 1. **AngularJS基本概念** - **模块(Module...

    AngularJS入门教程之服务(Service)

    $http服务是AngularJS中非常常用的内置服务之一,它提供了对HTTP协议的封装,能够简化从Web服务器获取数据的过程。开发者可以使用$http服务发出GET、POST、PUT、DELETE等HTTP请求,并处理从服务器返回的数据。在发送...

    基于angularJS实现的创建自定义表单demo

    在本文中,我们将深入探讨如何基于AngularJS实现创建自定义表单的动态功能。AngularJS,作为一款强大的前端JavaScript框架,被广泛应用于构建交互式的Web应用程序。它以其数据绑定、依赖注入和模块化的特性,使得...

    AngularJS 之Hello World篇

    AngularJS 是一款强大的前端JavaScript框架,由Google维护,主要用于构建单页应用(SPA,Single ..."Hello World"只是AngularJS之旅的第一步,随着学习的深入,你会发现它能帮助你构建出功能强大、响应迅速的Web应用。

    创建你自己的angularjs

    创建属于自己的AngularJS框架,实际上是指深入理解AngularJS的核心原理并尝试构建一个类似功能的框架。这不仅对理解AngularJS框架大有裨益,同时也是一种提升JavaScript编程能力的有效方式。这个过程中会涉及的知识...

    AngularJS创建自定义指令的方法详解

    - **文本和属性绑定**:使用`$interpolate`服务在编译过程中绑定文本和属性,AngularJS会检测匹配到的文本和属性值是否包含内嵌表达式。 - **SVG元素的特例**:由于SVG DOM API的限制,某些属性不能直接使用绑定语法...

    AngularJS的-查询列表

    工厂是AngularJS中创建服务的一种方式,它允许你定义一个返回值,这个返回值会被注入到需要的地方。你可以定义一个`QueryFactory`来处理数据获取和查询逻辑。 10. **指令扩展**: AngularJS的指令系统允许你扩展...

    AngularJS书两本

    双向数据绑定是AngularJS的核心特性之一,它使得模型和视图之间的数据同步变得极其简单。依赖注入机制则允许模块之间松散耦合,提高代码的可测试性和可维护性。指令系统扩展了HTML,使我们可以创建自定义的DOM元素和...

    Angularjs 合集 Angularjs 合集

    AngularJS的核心特性包括双向数据绑定、依赖注入、指令系统、过滤器和服务等。例如,双向数据绑定使得视图与模型之间的数据同步变得极其简单,而依赖注入则允许开发者轻松管理组件间的依赖关系,提高代码的可测试性...

    angularJs权威和精通angularjs

    开发者无需关心对象如何创建和管理,只需声明所需的服务,框架就会自动提供。 **3. MVC架构:** AngularJS遵循Model-View-Controller(MVC)模式,分离了业务逻辑、视图呈现和用户交互。这有助于代码的组织和可维护...

    Mastering Web Application Development with AngularJS

    版 次:1页 数:348字 数:448000印刷时间:2014-10-1开 本:16开纸 张:胶版纸印 次:1包 ...第10章 创建为全球用户服务的AngularJS应用 第11章 开发健壮的AngularJS应用 第12章 打包和部署AngularJS Web应用 索引

    AngularJS学习 chm 文件

    1. **双向数据绑定**:AngularJS 的核心特性之一是双向数据绑定,它使得模型(model)和视图(view)之间的数据保持同步。任何一方的改变都会立即反映到另一方,大大简化了开发者的工作。 2. **指令系统**:AngularJS ...

    angularJS理论与实战.ppt

    2. 数据绑定:AngularJS的核心特性之一,实现了视图与模型之间的双向绑定,即模型的变化会自动反映到视图,反之亦然。 3. 指令:AngularJS扩展了HTML,通过自定义指令(如ng-repeat、ng-if)来增强DOM操作,使动态...

    angularJs demo 各种基本用法

    自定义服务可以通过`factory`、`service`、`provider`等方式创建。 **指令(Directive)**: 指令是AngularJS的一个创新特性,它们扩展了HTML,让DOM元素具备更丰富的行为。常见的内置指令有`ngRepeat`(用于迭代...

    angularjs管理系统框架

    4. **服务**:AngularJS 的服务是一种可注入的对象,可以用来封装和共享代码,如 $http 服务用于与服务器通信,$rootScope 服务则是应用范围内的全局作用域。 5. **依赖注入**:AngularJS 的依赖注入机制简化了组件...

    AngularJS Eclipse 1.2.0 插件下载

    5. **项目模板**:提供了AngularJS项目的创建向导,可以快速搭建起一个标准的AngularJS应用结构。 6. **集成测试**:与 Karma 集成,支持单元测试和端到端测试,方便进行自动化测试。 7. **资源管理**:对...

    AngularJs 1.5.8

    2. **组件化**:AngularJS 1.5引入了组件化概念,使得创建可复用的UI部件变得更加简单。1.5.8版本进一步优化了组件的生命周期和属性绑定,使得组件更易于理解和维护。 3. **控制器**:在1.5.8版本中,控制器仍然...

    JS AngularJS 学习笔记

    通过在控制器或其他服务中声明依赖,AngularJS会自动注入所需的服务实例,降低了代码间的耦合度,提高了可测试性。 **4. 指令** AngularJS的指令扩展了HTML,使其能够表达更多的业务逻辑。例如,`ngRepeat`用于...

    最新AngularJS开发宝典视频教程 后盾网AngularJS培训视频教程 后盾网.txt

    ├最新AngularJS开发宝典—第070讲 spa项目的server层分析与使用factory创建服务.mp4 ├最新AngularJS开发宝典—第071讲 多个控制器共享服务server数据的处理实例.mp4 ├最新AngularJS开发宝典—第072讲 使用service...

Global site tag (gtag.js) - Google Analytics