zoukankan      html  css  js  c++  java
  • angularjs model.service vs provider vs factory?

    <!DOCTYPE html>
    <html ng-app="app">
    <head>
        <script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.min.js"></script>
        <meta charset=utf-8 />
        <title>JS Bin</title>
    </head>
    <body ng-controller="MyCtrl">
        {{serviceOutput}}
        <br/><br/>
        {{factoryOutput}}
        <br/><br/>
        {{providerOutput}}
    
        <script>
    
            var app = angular.module( 'app', [] );
    
            var MyFunc = function() {
    
                this.name = "default name";
    
                this.$get = function() {
                    this.name = "new name"
                    return "Hello from MyFunc.$get(). this.name = " + this.name;
                };
    
                return "Hello from MyFunc(). this.name = " + this.name;
            };
    
            // returns the actual function
            app.service( 'myService', MyFunc );
    
            // returns the function's return value
            app.factory( 'myFactory', MyFunc );
    
            // returns the output of the function's $get function
            app.provider( 'myProv', MyFunc );
    
            function MyCtrl( $scope, myService, myFactory, myProv ) {
    
                $scope.serviceOutput = "myService = " + myService;
                $scope.factoryOutput = "myFactory = " + myFactory;
                $scope.providerOutput = "myProvider = " + myProv;
    
            }
    
        </script>
    
    </body>
    </html>

    生成结果:

    myService = [object Object] 
    
    myFactory = Hello from MyFunc(). this.name = default name 
    
    myProvider = Hello from MyFunc.$get(). this.name = new name

    app.factory扩展:

    factory('AttendersService', function ($q, $http, $rootScope) {
    
      var service = {};
      var baseUrl = 'https://itunes.apple.com/search?term=';
      var _artist = '';
      var _finalUrl = '';
    
      var makeUrl = function(){
        _artist = _artist.split(' ').join('+');
        _finalUrl = baseUrl + _artist + '&callback=JSON_CALLBACK'
        return _finalUrl;
      }
    
      service.setArtist = function(artist){
        _artist = artist;
      }
    
      service.getArtist = function(){
        return _artist;
      }
    
      service.callItunes = function(){
        makeUrl();
        var deferred = $q.defer();
        $http({
          method: 'JSONP',
          url: _finalUrl
        }).success(function(data){
          deferred.resolve(data);
        }).error(function(){
          deferred.reject('There was an error')
        })
        return deferred.promise;
      }
    
      return service;
    }

    controller 引用:
    app.controller('myFactoryCtrl', function($scope, myFactory){
      $scope.data = {};
      $scope.updateArtist = function(){
        myFactory.setArtist($scope.data.artist);
      };
    
      $scope.submitArtist = function(){
        myFactory.callItunes()
          .then(function(data){
            $scope.data.artistData = data;
          }, function(data){
            alert(data);
          })
      }
    });
     

     app.service扩展:

    app.service('myService', function($http, $q){
      var baseUrl = 'https://itunes.apple.com/search?term=';
      var _artist = '';
      var _finalUrl = '';
    
      var makeUrl = function(){
        _artist = _artist.split(' ').join('+');
        _finalUrl = baseUrl + _artist + '&callback=JSON_CALLBACK'
        return _finalUrl;
      }
    
      this.setArtist = function(artist){
        _artist = artist;
      }
    
      this.getArtist = function(){
        return _artist;
      }
    
      this.callItunes = function(){
        makeUrl();
        var deferred = $q.defer();
        $http({
          method: 'JSONP',
          url: _finalUrl
        }).success(function(data){
          deferred.resolve(data);
        }).error(function(){
          deferred.reject('There was an error')
        })
        return deferred.promise;
      }
    
    });
    conrroller 引用:
    app.controller(
    'myServiceCtrl', function($scope, myService){ $scope.data = {}; $scope.updateArtist = function(){ myService.setArtist($scope.data.artist); }; $scope.submitArtist = function(){ myService.callItunes() .then(function(data){ $scope.data.artistData = data; }, function(data){ alert(data); }) } });

    app.provider扩展:

    app.provider('myProvider', function(){
      var baseUrl = 'https://itunes.apple.com/search?term=';
      var _artist = '';
      var _finalUrl = '';
    
      //Going to set this property on the config function below
      this.thingFromConfig = '';
    
      var makeUrl = function(){
        _artist = _artist.split(' ').join('+');
        _finalUrl = baseUrl + _artist + '&callback=JSON_CALLBACK'
        return _finalUrl;
      }
    
      this.$get = function($http, $q){
        return {
          callItunes: function(){
            makeUrl();
            var deferred = $q.defer();
            $http({
              method: 'JSONP',
              url: _finalUrl
            }).success(function(data){
              deferred.resolve(data);
            }).error(function(){
              deferred.reject('There was an error')
            })
            return deferred.promise;
          },
          setArtist: function(artist){
            _artist = artist;
          },
          getArtist: function(){
            return _artist;
          },
          thingOnConfig: this.thingFromConfig
        }
      }
    });
    
    
    controller引用:
    
    app.controller('myProviderCtrl', function($scope, myProvider){
      $scope.data = {};
      $scope.updateArtist = function(){
        myProvider.setArtist($scope.data.artist);
      };
    
      $scope.submitArtist = function(){
        myProvider.callItunes()
          .then(function(data){
            $scope.data.artistData = data;
          }, function(data){
            alert(data);
          })
      }
    
      $scope.data.thingFromConfig = myProvider.thingOnConfig;
    });
  • 相关阅读:
    C++ Boost 函数与回调应用
    C++ Boost库 操作字符串与正则
    C++ Boost库 实现命令行解析
    PHP 开发与代码审计(总结)
    c strncpy函数代码实现
    c strcat函数代码实现
    c strcpy函数代码实现
    c strlen函数代码实现
    Java-IO流-打印流
    Java-IO流-文件复制2
  • 原文地址:https://www.cnblogs.com/yujian-bcq/p/3936917.html
Copyright © 2011-2022 走看看