AngularJS 服务(Service)

在 AngularJS 中,服务是一个函数或对象,可在我们的 AngularJS 应用中使用。AngularJS 内建了30 多个服务。这一篇博客将为大家介绍一些服务的使用方式以及如何创建我们自己的服务。
AngularJS服务的API可以点击这里查看

$http

$http 是 AngularJS 应用中最常用的服务。 服务向服务器发送请求,应用响应服务器传送过来的数据。可以理解成jQuery中的ajax。

首先我们创建一个JSON数据文件,用于$http访问。

[1,2,3,4,5,6,7,8,9]

接下来我们使用$http读取数据:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="js/angular.min.js"></script>
        <script type="text/javascript">
            angular.module("myApp", []).controller("myCtrl", function($scope, $http) {
                $http.get("data.json").success(function(data) {
                    $scope.items = data;
                });
            });
        </script>
    </head>

    <body ng-app="myApp" ng-controller="myCtrl">
        <ul>
            <li ng-repeat="x in items">{{x}}</li>
        </ul>
    </body>
</html>

运行效果:

$interval

AngularJS $interval 服务对应了 JS window.setInterval 函数。

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="js/angular.min.js"></script>
        <script type="text/javascript">
            angular.module("myApp", []).controller("myCtrl", function($scope, $interval) {
                $scope.now = new Date();
                $interval(function() {
                    $scope.now = new Date();
                }, 1000);
            });
        </script>
    </head>

    <body ng-app="myApp" ng-controller="myCtrl">
        <div>{{now|date:'yyyy:MM:dd HH:mm:ss'}}</div>
    </body>

</html>

这样就实现了一个时钟效果,运行效果:

$location

AngularJS中的$location服务是对window.location的封装。

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="js/angular.min.js"></script>
        <script type="text/javascript">
            angular.module("myApp", []).controller("myCtrl", function($scope, $location) {
               $scope.items = [];
               $scope.items.push("absUrl:" + $location.absUrl());
               $scope.items.push("protocol:" + $location.protocol());
               $scope.items.push("host:" + $location.host());
               $scope.items.push("port:" + $location.port());
            });
        </script>
    </head>

    <body ng-app="myApp" ng-controller="myCtrl">
        <ul>
            <li ng-repeat="item in items">{{item}}</li>
        </ul>
    </body>

</html>

以上介绍的为$location的基本用法,另外,$location服务还提供了获得锚点等信息的方法,下面着重介绍一下$location服务获得查询参数的使用,刚接触的时候也走了一些弯路。
$location服务中将查询参数转换为JSON对象的方法为search

首先:假设我们的页面的访问地址为:http://127.0.0.1:8020/location.html,我们在其后添加一些参数,如:http://127.0.0.1:8020/location.html?p1=123&p2=456,我们理想中得到的JSON数据应为:{p1:123,p2:456},我们来试一下是这样子的吗?

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="js/angular.min.js"></script>
        <script type="text/javascript">
            angular.module("myApp", []).controller("myCtrl", function($scope, $location) {
               $scope.params = $location.search();
            });
        </script>
    </head>

    <body ng-app="myApp" ng-controller="myCtrl">
        <div>{{params}}</div>
    </body>

</html>

我们访问之后会发现页面显示的是:{},并未没有取到数据,这是AngularJS的BUG,并不是这样子,在$location的API中提供了这样的实例

// given url http://example.com/#/some/path?foo=bar&baz=xoxo
var searchObject = $location.search();
// => {foo: ‘bar’, baz: ‘xoxo’}

// set foo to ‘yipee’
location.search(‘foo′,‘yipee′);//location.search() => {foo: ‘yipee’, baz: ‘xoxo’}

我们仿照API的例子将我们的地址改造一下,改造成如下形式:
http://127.0.0.1:8020/mui/location.html#?p1=123&p2=456

这时候我们会发现页面上显示了我们预测的内容。其实在不对请求地址进行改造的情况下,我们也可以获得查询参数的,我们的代码应该这样写:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <!--必须添加base元素,否则报错-->
        <base href="/" />
        <script src="js/angular.min.js"></script>
        <script type="text/javascript">
            angular.module("myApp", []).
            config(function($locationProvider) {
                $locationProvider.html5Mode(true);
            }).controller("myCtrl", function($scope, $location) {
                $scope.params = $location.search();
            });
        </script>
    </head>

    <body ng-app="myApp" ng-controller="myCtrl">
        <div>{{params}}</div>
    </body>

</html>

自定义服务

上面介绍了一些AngularJS中内置的服务,下面来介绍一下如何自定义自己的服务,看过上一篇《AngularJS 过滤器》的朋友应该可以猜到自定义服务的方式,和自定义过滤器很像。下面我们就通过代码来演示一下如何自定义服务。

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="js/angular.min.js"></script>
        <script type="text/javascript">
            angular.module("myApp", [])
                .service('HQString', function() {
                    this.toUpperCase = function(x) {
                        return x.toUpperCase();
                    }
                }).controller("myCtrl", function($scope, HQString) {
                    $scope.name = HQString.toUpperCase('jianggujin');
                });
        </script>
    </head>

    <body ng-app="myApp" ng-controller="myCtrl">
        <div>{{name}}</div>
    </body>

</html>

在这段代码中,我们自定义了一个服务,并向其中添加了一个方法将字符串转换为大写,运行效果:

时间: 2024-10-21 16:16:05

AngularJS 服务(Service)的相关文章

AngularJS服务service用法总结_AngularJS

本文实例总结了AngularJS服务service用法.分享给大家供大家参考,具体如下: 引言 最近在项目中用到了关于AngularJS中的服务相关的知识,在起初学习这个东西的时候就了解到这个东西在项目中是经常被用到的,在angular中也是比较重要的一块,所以今天小编就总结一些关于service的知识. 认识Service 关于service我们一点都不陌生,不论实在c#中还是Java中我们经常会遇到service的概念,其实service的作用就是对外提供某种特定的功能,也就是我们经常说的"

AngularJS入门教程之服务(Service)_AngularJS

AngularJS 服务(Service) AngularJS 中你可以创建自己的服务,或使用内建服务. 什么是服务? 在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用. AngularJS 内建了30 多个服务. 有个 $location 服务,它可以返回当前页面的 URL 地址. 实例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &

AngularJS服务总结

在之前介绍AngularJS的博客中,简单的介绍了AngularJS提供的常用服务,以及如何自定义服务,具体可参见<AngularJS 服务(Service)>.在这一篇博客中,我将为大家详细介绍如何自定义服务,以及各种方式之间的区别. value(name, object) value(name, object)方法允许我们直接将一个普通值或对象作为服务.我们通过一段代码来看看如何使用: <!DOCTYPE html> <html> <head> <

【AngularJS】—— 13 服务Service

$http的使用 AngularJS为我们提供了很多种服务,$http用于发送http请求,动态的请求数据. 这样就需要使用web容器来运行代码了,先看看程序源码,视图方面还是跟普通的代码相同: <div ng-controller="myAppCtrl"> <ul> <li ng-repeat="user in users"> {{user.name}} </li> </ul> </div>

AngularJS 服务 demo

我们知道Angular提供的标准服务组件有以下: $http:用于处理 XMLHttpRequest $location:提供当前URL的信息 $q: 异步请求使用,promise/deferred模块 $routeProvider:配置路由 $log:日志服务 $http有下面短方法:$http.get() $http.head() $http.post() $http.put() $http.delete() $http.jsonp()   $的命名约定 前缀$是表示 Angular自己提供

AngularJS 服务详细讲解及示例代码_AngularJS

AngularJS支持使用服务的体系结构"关注点分离"的概念.服务是JavaScript函数,并负责只做一个特定的任务.这也使得他们即维护和测试的单独实体.控制器,过滤器可以调用它们作为需求的基础.服务使用AngularJS的依赖注入机制注入正常. AngularJS提供例如许多内在的服务,如:$http, $route, $window, $location等.每个服务负责例如一个特定的任务,$http是用来创建AJAX调用,以获得服务器的数据. $route用来定义路由信息等.内置

AngularJs Managing Service Dependencies详解_AngularJS

angular允许service将其他service声明为依赖,使用在自身实例化时使用的构造函数中. 为了声明依赖,我们需要在工厂方法声明中指定它们,并且在工厂方法中通过$inject属性(字符串标识数组)或者使用array notation. 通常$inject属性声明可以被丢弃(即http://www.jb51.net/article/91815.htm中提到的隐式依赖注入,但这个是实验属性,在而且在压缩混淆后会失效,慎用!). 使用array notation function myMod

前端MVC学习总结(三)——AngularJS服务、路由、内置API、jQueryLite

一.服务 AngularJS功能最基本的组件之一是服务(Service).服务为你的应用提供基于任务的功能.服务可以被视为重复使用的执行一个或多个相关任务的代码块. AngularJS服务是单例对象,这意味着只有一个实例被创建过,服务使用AngularJS的依赖注入机制来定义和注册. 可以把服务注入模块.控制器和其它服务. 1.1.内置服务 常见的内置服务如下: $http 发送http请求 $resource 创建一个可以RESTful服务器端数据源交互对象 $window 浏览器的windo

Dialog(七)——服务(Service)中弹出Dialog

MainActivity如下: package cn.testservice1; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.app.Activity; import android.content.Intent; /** * Demo描述: * 在服务中显示对话框