AngularJSAngularJS 笔记之创设服务方法比较 : factory vs service vs provider 。

  • Service:
    • service 是用 new 关键字实例化的。由此,你应该给 this
      添加属性,然后 service 重返 this。你把 service 传进 controller
      以后,在 controller 里 this 上的性质就能够用经过 service
      来使用了。
    • app.service(‘myService’,function(){
          var _artist = “Nelly”;
          this.getAritist = function(){
          return _artist;
      }
      });
      app.controller(“myCtrl”,function($scope,myService){
          $scope.getArtist = myService.getArtist;
      });

Factory :

那么难点来了,(学挖掘机找蓝翔呢)Angular
提供了二种办法来创制并登记大家的 service:factory, service 和 provider

率先说一下劳动那些事物是用来干嘛的。很多时候大家把太多的数据和逻辑都一股脑儿地往
controller 里放。那样我们的 controller
原来越臃肿。从它们的生命周期能够窥见,其实 controller
应该在急需的时候被发轫化,不用了就一向被吐弃,释放内部存款和储蓄器。因而,当我们切换或许刷新页面的时候,angular
就会清空当前的 controller。与所以,service
才应该被用来保存应用工作逻辑和持久化的数据,并且那一个数量能够在差别的
controller 之直接纳。

  • 用 factory 正是创办二个指标,为他添加属性,然后把那个目的 return
    出来。当你把 service 传进 controller 现在,在 controller
    中那几个目标的习性就足以因此 factory 使用了。

    • var app = angular.module(‘app’,[]);
    • app.factory(‘myFactory’,function(){
    •   var test = {};
    •   test.name = “Jason”;
    •   test.sayHello = function(){console.log(“hello world”)};
    •   return test;
    • });
      • app.controller(“myCtrl”,function($scope,myFactory){
         $scope.greet =myFactory.test.sayHello;
           //use the attrs of the obj in the factory
    • })
    • 那大致就是 factory 的用法了。
  • Provider :

    • Providers 是唯一一种你能够传进 .config() 函数的
      service。当您想要在 service
      对象启用从前,先举办模块范围的安排,那就应该用 provider。
    • app.provider(“myProvider”,function(){
          this._artist = ” ” ;
          this.thingFromConfig = ” ” ;
          this.$get = function(){
              var that  =  this;
              return  {
                 getArtist : function(){
                     return that._artist;
                  },
              thingOnConfig : that.thingFromConfig
              }
         },
         thingOnConfig 
      });

      app.controller(“myController”,function($scope,myProvider){
          $scope.artist = myProvider.getArtist();
          $scope.data.thingFromConfig = myProvider.thingOnConfig;
      });

      app.config(function(myProviderProvider){
          myProviderProvider.thingFromConfig = “This was set in
      config() ” ;
      })
        

       

相关文章