zoukankan      html  css  js  c++  java
  • AngularJS 讲解五, Factory ,Service , Provider

       一. 首先说一下,为什么要引入Factory,Service和Provider这三个Service层。

       1.因为我们不应该在controller层写入大量的业务逻辑和持久化数据,controller层越轻薄越好,业务逻辑和持久化数据应该放在Service层。

       2.针对内存性能的考虑,controller会在需要的时候才初始化,不需要的话,就会被放弃。所以AngularJS会在刷新页面的时候,清空controller. 而永久保存的数据放在Service层,那么在不同的controller之间可以被调用。

     二.AngularJS 提供了三种方法创建并注册自己的Service.

        1). Factory

        2). Service

        3). Provider

     三.对Factory,Service,Provider的详解

       1).Factory 相当于创建对象,在对象里添加属性和方法,返回这个对象,然后在controller里便可直接用service对象的属性啦

        例如:

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    	<meta charset="utf-8" />
        <script type="text/javascript" src="js/angular.js"></script>
        <script type="text/javascript" src="js/demo1.js"></script>
    </head>
    <body data-ng-app="demoApp">
        <div data-ng-controller="demoController">
            title:<span data-ng-bind="title"></span>
        </div>
    </body>
    </html>
    
    (function () {
        angular.module('demoApp', []);
        angular.module('demoApp').controller("demoController", function ($scope,demoFactory) {
            $scope.title = demoFactory.getTitle();
        });
        angular.module('demoApp').factory("demoFactory", function () {
            var _title = "ruby's test";
            var service = {};
            service.getTitle = function () {
                return _title;
            }
            return service;
        })
    })();
    

     2).Service 相当于是用new关键字来实例化的Service对象(相当于创建了一个构造器),因此只需要给this添加属性,然后由service返回this. 在controller层通过该service获得这个属性。

    angular.module('demoApp').controller("demoController", function ($scope,demoService) {
            $scope.title = demoService.getTitle();
        });
        angular.module('demoApp').service('demoService', function () {
            var _title = "Ruby Test service";
            this.getTitle = function () {
                return _title;
            }
        });
    

     3).Provider 是唯一一个能传到应用程序.config的服务。所以当想要在controller之前启用,先进行模块范围的配置(对provider的一部分属性值进行配置),就用provider

      如果想要在controller控制器里直接调用provider的属性和方法 要放到$get里

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    	<meta charset="utf-8" />
        <script type="text/javascript" src="js/angular.js"></script>
        <script type="text/javascript" src="js/demo1.js"></script>
    </head>
    <body data-ng-app="demoApp">
        <div data-ng-controller="demoController">
            title:<span data-ng-bind="title"></span>
            <br/>
            thingFromConfig:<span data-ng-bind="thingFromConfig"></span>
        </div>
    </body>
    </html>
    
    angular.module('demoApp', []);
    angular.module('demoApp').controller("demoController", function ($scope,demoProvider) {
            demoProvider.setTitle("provider service test");
            $scope.title = demoProvider.getTitle();
            $scope.thingFromConfig = demoProvider.thingOnConfig;
        });
        angular.module('demoApp').provider('demoProvider', function () {
            var _title = "";
            this.thingFromConfig = "";
            this.$get = function () {
                return {
                    setTitle: function (t) {
                        _title = t;
                    },
                    getTitle: function () {
                        return _title;
                    },
                    thingOnConfig: this.thingFromConfig
                }
            }
        });
        angular.module('demoApp').config(function (demoProviderProvider) {
            demoProviderProvider.thingFromConfig = "Hello, this is a thing from configuration.";
        });
    

    四.深入解析 AngularJs的service

       首先了解一下$provide

      AngularJs有个叫$provide的服务,这个服务可以创建供应商,我们的service都是通过供应商来定义的。

     有六个个创建供应商的方法:

     1.Factory

     2.Service

     3.Constant

     4.value

     5.provider

     6.decorator(装饰器)

       

  • 相关阅读:
    Django多表操作
    Django单表操作
    Django模板语言的复用
    DTL
    Django视图层、虚拟环境
    Django路由详解
    初识Django
    web框架
    JQ初级
    linux的基础配置命令
  • 原文地址:https://www.cnblogs.com/future-ruby/p/6197995.html
Copyright © 2011-2022 走看看