Javascript 使用angular.copy扩展服务

Javascript 使用angular.copy扩展服务,javascript,angularjs,angular-services,Javascript,Angularjs,Angular Services,我在angular做了如下的baseService app.service('baseService', ['$http', function($http) { 'use strict'; this.service = ""; this.load = function(){ // implement load } }]); 现在我希望其他服务扩展此服务,因为所有服务的load方法的实现都是相同的。我的派

我在angular做了如下的baseService

app.service('baseService', ['$http', function($http) {

        'use strict';
        this.service = "";
        this.load = function(){
            // implement load 
        }
}]);
现在我希望其他服务扩展此服务,因为所有服务的load方法的实现都是相同的。我的派生服务如下所示

app.service('jobsService', ['baseService', function( baseService ){

    'use strict';

    angular.copy(baseService, this);

    this.service = 'jobs';    

}]);
这里我使用的是
angular.copy(baseService,this)
以扩展baseService。这是继承服务的正确方法吗

   var BaseService = (function () {
      var privateVar = 0;
      return {
        someAwesomeStuff: function () {
          if (privateVar === 42) {
            alert('You reached the answer!');
          }
          privateVar += 1;
        };
      };
    }());
并创建如下子服务:

var ChildService = Object.create(BaseService);
ChildService.someMoreAwesomeStuff = function () {
  //body...
};

module.factory('ChildService', function () {
  return ChildService;
});
function MyCtrl(ChildService) {
  ChildService.someAwesomeStuff();
}
您可以这样使用ina控制器:

var ChildService = Object.create(BaseService);
ChildService.someMoreAwesomeStuff = function () {
  //body...
};

module.factory('ChildService', function () {
  return ChildService;
});
function MyCtrl(ChildService) {
  ChildService.someAwesomeStuff();
}
是的。。。我可以这么说

你的方法很好,我同意这是一个合适的解决方案。更多的是最佳实践问题,而不是细节。这里是一个完整的工作示例,其中服务模式和工厂模式都提供了不同的开发偏好


这是您的解决方案(extended2Service),也是我通常使用的解决方案(extendedService)

就个人而言,我更喜欢我的解决方案,因为我没有对该对象进行新的定位

angular.module('app',[])
.controller('mainCtrl',['$scope','baseService','extendedService','extendedService',function($scope,baseService,extendedService,extendedService){
$scope.test=8;
$scope.resultBase=baseService.addOne($scope.test);
$scope.resulttextend=extendedService.sum($scope.test,10);
$scope.result2Extended=extended2Service.sum($scope.test,10);
console.log(扩展服务);
console.log(extended2Service);
}])
.factory('baseService',function()){
var baseService={};
var\u addOne=函数(n){
返回n+1;
};
baseService.addOne=\u addOne;
返回基服务;
})
.factory('extendedService',['baseService',函数(baseService){
var extendedService={};
var_sum=函数(a,b){
对于(变量i=0;i

JS-Bin
值:{{test}}
基:{{resultBase}}
ResultTextEnded:{{ResultTextEnded}}
result2Extended:{{result2Extended}}
一个更简单、更直接的选择是使用John Resig的类

这为您提供了一种更面向对象的方法来继承/扩展类以及额外的功能,如构造函数调用、函数重写等

以您的例子:

'use strict';

angular.module('app').factory('BaseService', function ($http) {

  var service = Class.extend({ //Class from John Resig's code
    init: function (params) {
      this.params = params;
    },
    load: function (params) {

      return;
    },

  return service;
});
然后要扩展/继承:

angular.module('app').factory('JobService', function (BaseService) {

  var service = BaseService.extend({
    init: function (params) {
      this._super(params);
    }
  });

  return new service;
});

你有没有决定过要怎么做?我是用我的方法做的这是正确的方法吗?因为.factory()返回一个对象文本,如{'hi':function(){}。传递工厂将复制实例。服务只实例化一次,因此.service()具有此.functionName功能。我们如何将服务管理(因为我喜欢只实例化一次服务来传递应用程序的想法)与真正的类继承(从基本服务扩展而来的服务构造函数)相结合。“那太好了!”达塔赫德说。这里的JobService.factory()返回一个实例(新服务),它与使用.service()基本相同。请参阅您的服务需要一个工厂才能保留工厂,以便您的服务工厂可以访问您的工厂:-/我的意思是,这不是违背了工厂与服务的全部目的吗?有点让我想起:我喜欢有棱角的。我不是故意的,我喜欢将Resig的简单类继承与Angular结合使用,但这是正确的方法吗。