美文网首页
angularjs的服务怎么理解

angularjs的服务怎么理解

作者: Lusia_ | 来源:发表于2017-02-06 13:29 被阅读60次

服务用来提供公用类库
http://blog.csdn.net/zcl_love_wx/article/details/51404390(参考)

一、3种创建自定义服务的方式

<div ng-app="myApp" ng-controller="myCtrl">
    <p>{{r}}</p>
</div>

1、Factory

factory方式创建的服务,作用就是返回一个有属性有方法的对象。相当于:var f = myFactory();

    var app = angular.module('myApp', []);
    //通过工厂模式创建自定义服务
    app.factory('myFactory', function() {
        var service = {};//定义Object对象
        service.name = "wy";
        var age;//定义一个私有化的变量
        //对私有属性写getter和setter方法
    service.setAge = function(newAge){
            age = newAge;
        }
        service.getAge = function(){
            return age; 
        }
        return service;//返回这个Object对象
    });
    //创建控制器
    app.controller('myCtrl', function($scope, myFactory) {
        myFactory.setAge(20);
        $scope.r =myFactory.getAge();
        alert(myFactory.name);
    });

在自定义服务里可以注入服务,但不能注入$scope作用域对象。
例如:
app.factory('myFactory', function($http,$q)

2、Service

通过service方式创建自定义服务,相当于new的一个对象:var s = new myService();,把属性和方法添加到this上才可以在controller里调用。

var app = angular.module('myApp', []);
    app.service('myService', function($http,$q) {
        this.name = "service";
        this.myFunc = function (x) {
            return x.toString(16);//转16进制
        }
        this.getData = function(){
            var d = $q.defer();
            $http.get("ursl")//读取数据的函数。
                .success(function(response) {
                d.resolve(response);
            })
                .error(function(){
                alert(0)
                d.reject("error");
            });
            return d.promise;
        }
    });
    app.controller('myCtrl', function($scope, myService) {
        $scope.r = myService.myFunc(255);
        myService.getData().then(function(data){
            console.log(data);//正确
        },function(data){
            alert(data)//错误
        });
    });

3、Provider

只有provder是能传 .config() 函数的 service,若想在 service 对象启用之前,先进行模块范围的配置,那就应该选择 provider。

4、在过滤器中注入自定义服务

<div ng-app="myApp">在过滤器中使用服务: '<h1>{{255 | myFormat}}'</h1></div>
<script>
    var app = angular.module('myApp', []);
    app.service('ser', function() {
        this.myFunc = function (x) {
            return x.toString(16);
        }
    });
    app.filter('myFormat',['ser', function(ser) {
        return function(x) {
            return hexafy.myFunc(x);
        };
    }]);
</script>

二、service与controller、directive交互

<button add-book-button>Add book</button>//自定义指令
<ul ng-controller="books.list">  
    <li ng-repeat="i in books">书名:{{i.title}},作者:{{i.author}}</li>
</ul>


var appModule = angular.module(‘app‘, []);
    // service 单例,共享数据
    appModule.service(‘Book‘, [‘$rootScope‘, function($root){
        var service = {
            books: [
                {
                    "title": "书名1",
                    "author": "作者1"
                },
                {
                    "title": "书名2",
                    "author": "作者2"
                }
            ],
            addBook: function(book){
                service.books.push(book);
                // 给root下所有books.update派发事件
                $root.$broadcast(‘books.update‘);
            }
        };
        return service;
    }]);
    (1)
    // 在控制器里使用Book服务
    appModule.controller(‘books.list‘, [‘$scope‘, ‘Book‘, function(scope, Book){
        scope.books = Book.books;
        scope.$on(‘books.update‘, function(){
            scope.$apply(function(){
                scope.books = Book.books;
            });
        });
    }]);

    // (2)在指令里使用Book服务
    appModule.directive(‘addBookButton‘, [‘Book‘, function(Book){
        return {
            restrict: ‘A‘,
            link: function(scope, el){
                var n = 0;
                el.bind(‘click‘, function(){
                    Book.addBook({
                        "title": "新书"+(++n),
                        "author": "新作者"+n
                    });
                });
            }
        };
    }]);

相关文章

  • angularjs的服务怎么理解

    服务用来提供公用类库http://blog.csdn.net/zcl_love_wx/article/detail...

  • AngularJS Service+Http+Select+表格

    AngularJS 服务(Service) AngularJS 中你可以创建自己的服务,或使用内建服务。 什么是服...

  • AngularJS基础学习-02

    AngularJS 服务(Service) AngularJS 中你可以创建自己的服务,或使用内建服务。 什么是服...

  • angularJs Service

    在angularJs中服务是一个函数或对象,angularJs内置了30多个服务 $location服务:返回当前...

  • AngularJs作用域理解

    AngularJs作用域理解 基于AngularJS入门与进阶(江荣波 著)这本书的笔记 AngularJS 1....

  • AngularJS之服务(Service)

    AngularJS 中你可以创建自己的服务,或使用内建服务。 首先我们来看一下AngularJS中服务是指什么? ...

  • AngularJS服务(Service)

    什么是服务? 在AngularJS中,服务是一个函数或者对象,可在你的AngularJS应用中使用 Angular...

  • AngularJS 服务(Service)

    一、什么是服务? 在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用。 二...

  • AngularJS XMLHttpRequest

    $http是AngularJS中的一个核心服务,用于读取远程服务器的数据。 AngularJS 模块 模块定义了一...

  • AngularJs服务

    服务是一个对象或函数,对外提供特定的功能。 1、内置服务 $location是对原生Javascript中loca...

网友评论

      本文标题:angularjs的服务怎么理解

      本文链接:https://www.haomeiwen.com/subject/wyoemttx.html