`
流浪的我
  • 浏览: 34132 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

angular.js 服务(Service)

 
阅读更多

AngularJS中为我们提供了众多的内置服务,通过这些内置服务可以轻松的实现一些常用功能。下面对Angular中常用的内置服务进行一下总结。

1.$location服务

$location服务解析在浏览器地址栏中的URL(基于window.location)并且让URL在你的应用中可用。改变在地址栏中的URL会作用到$location服务,同样的,改变$location服务也会改变浏览器的地址栏。(可以使用$location进行重定向等操作)

当浏览器的URL改变时,不会重新加载整个页面。如果想要加载整个页面,需要使用$window.lacation.href。

$location服务用于返回当前页面的URL地址,示例代码如下:
var app = angular.module('myApp', []); 
app.controller('customersCtrl', function($scope, $location) { 
 $scope.myUrl = $location.absUrl(); 
}); 
这里为$scope对象定义了myUrl变量,然后利用$location服务读取到了URL地址并存储到myUrl中。

2..$http服务

 

$http 是 AngularJS 中最常用的服务,它经常用于服务器的数据传输。下面的例子中服务向服务器发送请求,应用响应服务器传送过来的数据。

var app = angular.module('myApp', []); 
app.controller('myCtrl', function($scope, $http) { 
 $http.get("welcome.htm").then(function (response) { 
  $scope.myWelcome = response.data; 
 }); 
});

我们可以使用内置的$http服务直接同外部进行通信。$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象。

1).链式调用

$http服务是只能接受一个参数的函数,这个参数是一个对象,包含了用来生成HTTP请求的配置内容。这个函数返回一个promise对象,具有success和error两个方法。

$http({
url:'data.json',
method:'GET'
}).success(function(data,header,config,status){
//响应成功
}).error(function(data,header,config,status){
//处理响应失败
});

 2).返回一个promise对象

var promise=$http({
method:'GET',
url:"data.json"
});

由于$http方法返回一个promise对象,我们可以在响应返回时用then方法来处理回调。如果使用then方法,会得到一个特殊的参数,它代表了相应对象的成功或失败信息,还可以接受两个可选的函数作为参数。或者可以使用success和error回调代替。

promise.then(function(resp){
//resp是一个响应对象
},function(resp){
//带有错误信息的resp
});

 或者:

promise.success(function(data,status,config,headers){
//处理成功的响应
});
promise.error(function(data,status,hedaers,config){
//处理失败后的响应
});

 then()方法与其他两种方法的主要区别是,它会接收到完整的响应对象,而success()和error()则会对响应对象进行析构。

3).快捷的get请求

(1)$http.get('/api/users.json');

get()方法返回HttpPromise对象。

还可以发送比如:delete/head/jsonp/post/put 函数内可接受参数

(2)以再发送jsonp请求举例说明: 为了发送JSONP请求,其中url必须包含JSON_CALLBACK字样。

jsonp(url,config) 其中config是可选的

 

var promise=$http.jsonp("/api/users.json?callback=JSON_CALLBACK");

4).也可以将$http当做函数来使用,这时需要传入一个设置对象,用来说明如何构造XHR对象。

$http({
method:'GET',
url:'/api/users.json',
params:{
'username':'tan'
});

其中设置对象可以包含以下主要的键:

(1)method

可以是:GET/DELETE/HEAD/JSONP/POST/PUT

(2)url:绝对的或者相对的请求目标
(3)params(字符串map或者对象)
这个键的值是一个字符串map或对象,会被转换成查询字符串追加在URL后面。如果值不是字符串,会被JSON序列化。
比如这个:

//参数会转为?name=ari的形式
$http({
params:{'name':'ari'}
});

(4)data(字符串或者对象)

这个对象中包含了将会被当作消息体发送给服务器的数据。通常在发送POST请求时使用。

从AngularJS 1.3开始,它还可以在POST请求里发送二进制数据。要发送一个blob对象,你可以简单地通过使用data参数来传递它。
例如:

var blob=new Blob(['Hello world'],{type:'text/plain'});
$http({
method:'POST',
url:'/',
data:blob
});

4).响应对象

AngularJS传递给then()方法的响应对象包含了四个属性。

data

这个数据代表转换过后的响应体(如果定义了转换的话)

status

响应的HTTP状态码

headers

这个函数是头信息的getter函数,可以接受一个参数,用来获取对应名字值

例如,用如下代码获取X-Auth-ID的值:

$http({
method: 'GET',
url: '/api/users.json'
}).then (resp) {
// 读取X-Auth-ID
resp.headers('X-Auth-ID');
});

config

这个对象是用来生成原始请求的完整设置对象。

statusText(字符串)

这个字符串是响应的HTTP状态文本。

5).缓存HTTP请求

默认情况下,$http服务不会对请求进行本地缓存。在发送单独的请求时,我们可以通过向$http请求传入一个布尔值或者一个缓存实例来启用缓存。

$http.get('/api/users.json',{ cache: true })
.success(function(data) {})
.error(function(data) {});

第一次发送请求时,$http服务会向/api/users.json发送一个GET请求。第二次发送同一个GET请求时,$http服务会从缓存中取回请求的结果,而不会真的发送一个HTTP GET请求。

在这个例子里,由于设置了启用缓存,AngularJS默认会使用$cacheFactory,这个服务是AngularJS在启动时自动创建的。

 

如果想要对AngularJS使用的缓存进行更多的自定义控制,可以向请求传入一个自定义的缓存实例代替true。

 

3.$timeout()服务和$interval()服务

 

这两个服务的功能对应的是javascript中的setTimeout()和setTimeInterval函数。一个简单的实时更新时间例子如下:

app.controller('myCtrl', function($scope, $interval) { 
 $scope.theTime = new Date().toLocaleTimeString(); 
 $interval(function () { 
  $scope.theTime = new Date().toLocaleTimeString(); 
 }, 1000); 
}); 

除了Angular中提供的内置服务外,我们也可以自己定义服务,利用service即可,下面是一个定义服务的基本代码框架:

app.service('hexafy', function() { 
 this.myFunc = function (x) { 
  return x.toString(16); 
 } 
}); 

 定义好服务后,我们可以像使用内置的Angular服务一样使用它:

app.controller('myCtrl', function($scope, hexafy) { 
 $scope.hex = hexafy.myFunc(255); 
});

 angular.js 实例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp" ng-controller="siteCtrl"> 
<ul>
  <li ng-repeat="x in names">
    {{ x.Name + ', ' + x.Country }}
  </li>
</ul>
</div>

<script>
var app = angular.module('myApp', []);
app.controller('siteCtrl', function($scope, $http) {
  $http.get("http://www.runoob.com/try/angularjs/data/sites.php")
  .success(function (response) {$scope.names = response.sites;});
});
</script>
</body>
</html>

存储在web服务器上的json文件

http://www.runoob.com/try/angularjs/data/sites.php

{
    "sites": [
        {
            "Name": "菜鸟教程",
            "Url": "www.runoob.com",
            "Country": "CN"
        },
        {
            "Name": "Google",
            "Url": "www.google.com",
            "Country": "USA"
        },
        {
            "Name": "Facebook",
            "Url": "www.facebook.com",
            "Country": "USA"
        },
        {
            "Name": "微博",
            "Url": "www.weibo.com",
            "Country": "CN"
        }
    ]
}

 结果为:

 

  • 菜鸟教程, CN
  • Google, USA
  • Facebook, USA
  • 微博, CN

实例解析:

AngularJS 应用通过 ng-app 定义。应用在 <div> 中执行。

ng-controller 指令设置了 controller 对象 名。

函数 customersController 是一个标准的 JavaScript 对象构造器

控制器对象有一个属性: $scope.names

$http.get() 从web服务器上读取静态 JSON 数据

服务器数据文件为:  http://www.runoob.com/try/angularjs/data/sites.php

当从服务端载入 JSON 数据时,$scope.names 变为一个数组。

分享到:
评论

相关推荐

    angular.js后台管理系统.zip

    Angular.js,作为一个强大的前端JavaScript框架,由Google维护,被广泛应用于构建复杂的单页应用(SPA)和后台管理系统。本篇将深入探讨Angular.js的核心特性、架构设计以及如何在实际项目中构建一个后台管理系统。 ...

    Angular.js跨controller实现参数传递的两种方法.docx

    Service是Angular.js中的一个核心概念,它是一种单例对象,可以在应用的任何地方被注入并使用。为了在Controllers之间传递参数,我们可以创建一个自定义Service,提供getter和setter方法来存储和获取数据。 ```...

    使用Angular.js开发的注意事项

    Angular.js作为一款流行的前端JavaScript框架,由Google开发和维护,使用MVVM(Model-View-ViewModel)架构模式,旨在简化前端开发的复杂性。在使用Angular.js进行开发时,有若干需要注意的事项和常见的问题点,接...

    基于angular.js的分页导航

    - `script.js`: 包含AngularJS应用的初始化、服务、指令和控制器的定义。 - `styles.css`: 分页导航条的样式文件,用于美化分页组件的外观。 六、最佳实践 1. 使用模块化:将分页功能封装成一个独立的AngularJS模块...

    Angular.js-Ping-Service:使用 HTTP GET 请求 ping 指定 URL 或 IP 的 Angular.js 模块

    安装将 pingService.js 复制到项目的 JavaScript 目录。 将“pingService”模块的依赖项添加到您的应用程序。 将“ping”服务注入您的控制器。用法从您的控制器: ping.ping(testURL, function(response) { if ...

    JsDic:简单的依赖注入容器,用于受Angular.js启发的javascript

    受Angular.js启发的javascript的Dependecy注入容器 执照:麻省理工学院 特征 Angular.js样式中的值,服务和工厂定义 像在Angular.js中一样,依赖关系可以通过名称数组定义或从函数中解析 循环依赖检测 与浏览器,...

    angular-gem-store:使用 Angular.js 进行 2 向数据绑定

    Angular.js 是一个由 Google 维护的开源 JavaScript 框架,主要用于构建单页应用程序(SPA)。它提供了一种声明式编程方式,使得前端开发更加高效,尤其是在处理复杂的用户界面和数据绑定时。Angular.js 的核心特性...

    Angular.js v1.8.2-源码.zip

    查看$provide和.factory、.service等方法,理解服务的创建和注入机制。 7. 测试支持:AngularJS 1.x版本也提供了测试工具,如ngMock和ngScenario,方便进行单元测试和端到端测试。通过阅读源码,可以了解如何编写...

    angularjs-datatables-service:用于angular.datatables.js的AngularJS服务包装器

    script type =" text/javascript " src =" angularjs-datatables-service.js " &gt; &lt;/ script &gt; 将其包含在您的app.module.js中 'use strict' ; angular . module ( 'exampleApp' , [ 'angularjs-...

    Packt.TypeScript.for.Angular.Developers (含源代码)

    接着,书中详细讲解了Angular框架的核心组件,如模块(Module)、组件(Component)、服务(Service)、指令(Directives)和管道(Pipes)。TypeScript在Angular中的应用贯穿始终,阐述了如何使用TypeScript定义...

    angular-1.5.0.zip

    Angular.js,通常简称为Angular,是由Google维护的一个开源JavaScript框架,主要用于构建动态Web应用。它采用MVC(Model-View-Controller)架构模式,提供了丰富的功能,使得开发复杂的前端应用程序变得更为简单。...

    angular js代码食谱(recipes with angular js)

    5. **模块**:Angular JS 应用基于模块构建,模块可以包含控制器、服务、指令等组件,方便管理和组织代码。 6. **控制器**:控制器是连接视图和模型的桥梁,通过 `ng-controller` 指令定义,书中会展示如何在控制器...

    ngAnimatedScroll:基于promise的angular.js服务有助于动画滚动

    基于promise的angular.js服务有助于动画滚动 弃用通知 由于,该模块已弃用,不再维护。 特征 公开将任意元素滚动到另一个元素位置的服务。 已启用承诺:服务返回承诺,并在滚动操作完成后解决。 启用选择器:使用...

    angular-olark:Olark 的 Angular.js 服务 实时聊天服务

    2. **创建Angular服务**:在Angular应用中,使用`angular.module().service()`或`.factory()`创建一个名为`olarkService`的服务。这个服务将封装与Olark API的交互,比如设置配置、显示聊天窗口、发送消息等。 3. *...

    Angular:Angular.js 的可重用部分

    Angular.js 是一个强大的前端JavaScript框架,它极大地简化了构建动态Web应用程序的过程。在“Angular:Angular.js 的可重用部分”这一主题中,我们将深入探讨如何创建和利用可重用的组件,提高代码复用性,提升开发...

    Angular.js跨controller实现参数传递的两种方法

    本篇文章将详细介绍两种常见的在Angular.js中跨Controller传递参数的方法:使用Service和利用$stateParams。 一、使用Service(Service/Factory) Service是Angular.js中的一个核心概念,它是一个单例对象,可以在...

    template-simple-angular:Angular.js 项目的简单骨架,所有架构都基于 Angular Seed

    Angular.js 是一个强大的前端JavaScript框架,由Google维护,用于构建单页应用程序(SPA)。它提供了一种声明式编程方式,使得开发者可以更专注于数据和业务逻辑,而无需处理DOM操作。Angular.js的核心特性包括双向...

    angular-1.5.8.js压缩包

    自定义服务可以通过`angular.module().service()`,`.factory()`或`.provider()`创建。 ### 5. 过滤器(Filters) 过滤器用于格式化数据,如日期、货币、数组排序等。在1.5.8版本中,过滤器可以直接在表达式中使用...

    angular.js和vue.js中实现函数去抖示例(debounce)

    本文将分别探讨在angular.js和vue.js中如何实现对用户输入的防抖。 angular.js中解决方案 把去抖函数写成一个service,方便多处调用: .factory('debounce', ['$timeout','$q', function($timeout, $q) { // The ...

    sharpingup:CodeSchool Sharping Up with Angular.JS 课程项目的实现

    Angular.JS是一个由Google维护的前端JavaScript框架,用于构建动态web应用。它的主要特点是数据绑定、依赖注入和模块化。在"sharpingup-master"项目中,你可能会接触到以下几个关键知识点: 1. **数据绑定**:...

Global site tag (gtag.js) - Google Analytics