关联目录索引:
重温AngularJS(一)-- 表达式、指令
重温AngularJS(二)-- 模型ng-model指令
重温AngularJS(三)-- Scope(作用域)
重温AngularJS(四)-- 控制器ng-controller
重温AngularJS(五)-- 过滤器
重温AngularJS(六)-- 服务Service
重温AngularJS(七)-- Select(选择框)、表格
重温AngularJS(八)-- 事件
重温AngularJS(九)-- 模块、全局API
重温AngularJS(十)-- 表单、输入验证
重温AngularJS(十一)-- 包含、动画
重温AngularJS(十二)-- 依赖注入(5个核心组件)
重温AngularJS(十三)-- 路由
作者:Zyao89;转载请保留此行,谢谢;
AngularJS 中你可以创建自己的服务,或使用内建服务。
什么是服务?
在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用。
AngularJS 内建了30 多个服务。
有个 $location
服务,它可以返回当前页面的 URL 地址。
var app = angular.module('myApp', []);
app.controller('customersCtrl', function($scope, $location) {
$scope.myUrl = $location.absUrl();
});
注意: $location
服务是作为一个参数传递到 controller 中。如果要使用它,需要在 controller 中定义。
为什么使用服务?
在很多服务中,比如 $location
服务,它可以使用 DOM 中存在的对象,类似 window.location 对象,但 window.location 对象在 AngularJS 应用中有一定的局限性。
AngularJS 会一直监控应用,处理事件变化, AngularJS 使用 $location
服务比使用 window.location 对象更好。
$location vs window.location
window.location | $location.service | |
---|---|---|
目的 | 允许对当前浏览器位置进行读写操作 | 允许对当前浏览器位置进行读写操作 |
API | 暴露一个能被读写的对象 | 暴露jquery风格的读写器 |
是否在AngularJS应用生命周期中和应用整合 | 否 | 可获取到应用声明周期内的每一个阶段,并且和$watch 整合 |
是否和HTML5 API的无缝整合 | 否 | 是(对低级浏览器优雅降级) |
和应用的上下文是否相关 | 否,window.location.path 返回"/docroot/actual/path" |
是,$location.path() 返回"/actual/path" |
$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;
});
});
读取 JSON 文件
以下是存储在web服务器上的 JSON 文件:
{
"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"
}
]
}
$http.get(url)
是用于读取服务器数据的函数。
<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("Json数据网址")
.success(function (response) {$scope.names = response.sites;});
});
</script>
当从服务端载入 JSON 数据时,$scope.names
变为一个数组。
$timeout 服务
$timeout
服务对应了 JS window.setTimeout 函数。
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $timeout) {
$scope.myHeader = "Hello World!";
$timeout(function () {//两秒后显示信息
$scope.myHeader = "How are you today?";
}, 2000);
});
$interval 服务
$interval
服务对应了 JS window.setInterval 函数。
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $interval) {
$scope.theTime = new Date().toLocaleTimeString();
$interval(function () {//每两秒显示信息
$scope.theTime = new Date().toLocaleTimeString();
}, 1000);
});
创建自定义服务
创建名为 abcd 的访问自定义服务,链接到你的模块中:
app.service('abcd', function() {
this.myFunc = function (x) {
return x.toString(16);
}
});
要使用访问自定义服务,需要在定义过滤器的时候独立添加:
app.controller('myCtrl', function($scope, abcd) {
$scope.hex = abcd.myFunc(255);//使用自定义的的服务 abcd 将一个数字转换为16进制数
});
过滤器中,使用自定义服务
当你创建了自定义服务,并连接到你的应用上后,你可以在控制器,指令,过滤器或其他服务中使用它。
app.filter('myFormat',['abcd', function(abcd) {
return function(x) { // 在过滤器 myFormat 中使用服务 abcd
return abcd.myFunc(x);
};
}]);
在对象数组中获取值时你可以使用过滤器:
<ul>
<li ng-repeat="x in counts">{{x | myFormat}}</li>
</ul>