angularJS provider/factory/service初解析

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index_provider_service_factory的实例</title>
    <script type="text/javascript" src="angular.min.js"></script>
</head>
<body>
  <div ng-app="firstApp">
      <div ng-controller="firstController">
          <li>factory name:{{factoryName}}</li>
          <br><li>service name:{{serviceName}}</li>
          <br><li>provider name:{{providerName}}</li>
          <br>provider 可以在应用启动时进行配置:
          <br><li>config to provider:{{provideAge}}</li>

      </div>
  </div>
  <script type="text/javascript">
//service是一个可注入的构造器
//factory是一个可注入的方法
//provider是一个可配置的factory
     var firstApp=angular.module('firstApp',[]);
//factory  返回一个对象的实例, 对于 AngularJS 的 factory 来说, 就是先定义一个对象,
//给这个对象添加属性和方法, 然后返回这个对象;factory是普通function,而service是一个
//构造器(constructor),
//这样Angular在调用service时会用new关键字,而调用factory时只是调用普通的function,
//所以factory可以返回任何东西,而service可以不返回

     firstApp.factory('firstFactory',function(){
          var firstFactory={};
          firstFactory.name="first factory Name";
//最后controller 拿到的就是 firstFactory 对象, 相当于下面的代码:
//var firstFactory = firstFactory();
          return firstFactory;
      });

      firstApp.service('firstService', function() {
          //最后controller 拿到的对象就是下面代码中this指向的对象
          this.nameService = 'first service';
      });
//与 factory 和 service 稍有不同的是, provider 必须提供一个 $get 方法,当然也
//可以说provider是一个可配置的factory ;
//$get 方法和 factory 要求是一致的,即: 先定义一个对象, 给这个对象添加属性和方法,
//然后返回这个对象

      firstApp.provider('firstProvider', function() {
//最后controller拿到的对象就是provider的$get方法返回的对象,相当于下面的代码:
//var instance = new result();
//var provider = instance.$get();
          var ageDefault=20;
          var age=ageDefault;
          this.setAge=function(ageNew){
              age=ageNew;
          }
        this.$get = function() {
            var result = {};
            result.providerName = 'name from provider';
            result.age=age;
            result.defaultAge=ageDefault;
            return result;
      }});

   // inject factory, service and provider to a controller
        firstApp.controller('firstController', ['$scope', 'firstFactory', 'firstService', 'firstProvider', function($scope, firstFactory, firstService, firstProvider) {
            $scope.factoryName =firstFactory.name;
            $scope.serviceName =firstService.nameService;
            $scope.providerName = firstProvider.providerName;
            $scope.provideAge=firstProvider.age;
        }]);

 //实现有关的setName方法之后,可以module启动时来调用这个方法,实现对provider的配置。
 //传进去的名字命名方式:xxx+Provider;
        firstApp.config(function(firstProviderProvider) {
            firstProviderProvider.setAge(26);
        });
  </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值