AngularJS 服务(Service)

AngularJS 中你可以创建自己的服务,或使用内建服务。

什么是服务?

在 AngularJS 中,服务是一个函数对象,可在你的 AngularJS 应用中使用。

AngularJS 内建了30 多个服务。

有个 $location 服务,它可以返回当前页面的 URL 地址。http://qiaolevip.iteye.com/blog/2154955

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>
    <div ng-app="myApp" ng-controller="myCtrl">
        <p>
            当前页面的url:</p>
        <h3>
            {{myUrl}}</h3>
    </div>
    <p>
        该实例使用了内建的 $location 服务获取当前页面的 URL。</p>
    <script>
        var app = angular.module('myApp', []);
        app.controller('myCtrl', function ($scope, $location) {
            $scope.myUrl = $location.absUrl();//
        });
    </script>
</body>
</html>

注意 $location 服务是作为一个参数传递到 controller 中。如果要使用它,需要在 controller 中定义。

为什么使用服务?

$http 是 AngularJS 应用中最常用的服务。服务向服务器发送请求,应用响应服务器传送过来的数据。

AngularJS 会一直监控应用,处理事件变化, AngularJS 使用 $location 服务比使用 window.location 对象更好。

$http 服务

$http 是 AngularJS 应用中最常用的服务。 $http服务向服务器发送请求,应用响应服务器传送过来的数据。

我们可以使用内置的$http服务直接同外部进行通信。$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象。http://www.2cto.com/kf/201506/405137.html

使用 $http 服务向服务器请求数据:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8">
        <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
    </head>

    <body>

        <div ng-app="myApp" ng-controller="myCtrl">

            <p>欢迎信息:</p>

            <h1>{{myWelcome}}</h1>

        </div>

        <p> $http 服务向服务器请求信息,返回的值放入变量 "myWelcome" 中。</p>

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

    </body>

</html>

$timeout 服务

AngularJS $timeout 服务对应了 JS window.setTimeout 函数。

两秒后显示信息:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8">
        <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
    </head>

    <body>

        <div ng-app="myApp" ng-controller="myCtrl">

            <p>两秒后显示信息:</p>

            <h1>{{myHeader}}</h1>

        </div>

        <p>$timeout 访问在规定的毫秒数后执行指定函数。</p>

        <script>
            var app = angular.module('myApp', []);
            app.controller('myCtrl', function($scope, $timeout) {
                $scope.myHeader = "Hello World!";
                $timeout(function() {
                    $scope.myHeader = "How are you today?";
                }, 2000);
            });
        </script>

    </body>

</html>

$interval 服务

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

每两秒显示信息:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8">
        <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
    </head>

    <body>

        <div ng-app="myApp" ng-controller="myCtrl">

            <p>现在时间是:</p>

            <h1>{{theTime}}</h1>

        </div>

        <p>$interval 访问在指定的周期(以毫秒计)来调用函数或计算表达式。</p>

        <script>
            var app = angular.module('myApp', []);
            app.controller('myCtrl', function($scope, $interval) {
                $scope.theTime = new Date().toLocaleTimeString();
                $interval(function() {
                    $scope.theTime = new Date().toLocaleTimeString();
                }, 1000);
            });
        </script>

    </body>

</html>

创建自定义服务

你可以创建自定义的访问,链接到你的模块中:

先创建名为hexafy 的访问,要使用自定义的访问,需要在定义过滤器的时候独立添加:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8">
        <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
    </head>

    <body>
        <div ng-app="myApp" ng-controller="myCtrl">

            <p>255 的16进制是:</p>

            <h1>{{hex}}</h1>

        </div>

        <p>自定义服务,用于转换16进制数:</p>

        <script>
            var app = angular.module('myApp', []);
            //创建名为hexafy 的访问:
            app.service('hexafy', function() {
                this.myFunc = function(x) {
                    return x.toString(16);
                }
            });
            app.controller('myCtrl', function($scope, hexafy) {
                $scope.hex = hexafy.myFunc(255);
            });
        </script>

    </body>

</html>

过滤器中,使用自定义服务

当你创建了自定义服务,并连接到你的应用上后,你可以在控制器,指令,过滤器或其他服务中使用它。

在过滤器 myFormat 中使用服务 hexafy:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8">
        <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
    </head>

    <body>

        <div ng-app="myApp">
            在过滤器中使用服务:

            <h1>{{255 | myFormat}}</h1>

        </div>

        <script>
            var app = angular.module('myApp', []);
            app.service('hexafy', function() {
                this.myFunc = function(x) {
                    return x.toString(16);
                }
            });
            app.filter('myFormat', ['hexafy', function(hexafy) {
                return function(x) {
                    return hexafy.myFunc(x);
                };
            }]);
        </script>

    </body>

</html>

在从对象会数组中获取值时你可以使用过滤器:

创建服务 hexafy:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8">
        <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
    </head>

    <body>

        <div ng-app="myApp" ng-controller="myCtrl">
            <p>在获取数组 [255, 251, 200] 值时使用过滤器:</p>

            <ul>
                <li ng-repeat="x in counts">{{x | myFormat}}</li>
            </ul>

            <p>过滤器使用服务将10进制转换为16进制。</p>
        </div>

        <script>
            var app = angular.module('myApp', []);
            app.service('hexafy', function() {
                this.myFunc = function(x) {
                    return x.toString(16);
                }
            });
            app.filter('myFormat', ['hexafy', function(hexafy) {
                return function(x) {
                    return hexafy.myFunc(x);
                };
            }]);
            app.controller('myCtrl', function($scope) {
                $scope.counts = [255, 251, 200];
            });
        </script>

    </body>

</html>

posted @ 2016-07-10 14:11  Chris_在IT道路上前行  阅读(199)  评论(0编辑  收藏  举报