Angularjs 安格拉斯混合工厂

Angularjs 安格拉斯混合工厂,angularjs,Angularjs,我见过一些示例,其中方法作为mixin添加到AngularJS控制器。 例如: (function () { var app = angular.module('angularjs-starter', []); var ParentCtrl = function ($scope, $location) { $scope.path = function () { return $location.absUrl(); }; }; app.control

我见过一些示例,其中方法作为mixin添加到AngularJS控制器。 例如:

(function () {
  var app = angular.module('angularjs-starter', []);

  var ParentCtrl = function ($scope, $location) {
    $scope.path = function () {
      return $location.absUrl();
    };
  };

  app.controller('ChildCtrl', function($scope, $injector) {
    $injector.invoke(ParentCtrl, this, {$scope: $scope});
    $scope.url = $scope.path();
  });
})();
(function () {
  var app = angular.module('angularjs-starter', []);

  app.factory('CalculatorFactory', function() {
    return {
      add: function(arg1, arg2) {
        return arg1 + arg2;
      }
    }
  });

  app.controller('MainCtrl', function($scope, CalculatorFactory) {
    angular.extend($scope, CalculatorFactory);

    // $scope now has the `add() fn`
    var result = $scope.add(1, 2);
  });

})();
我希望能够将新方法作为“混合”添加到工厂中。 我该怎么做?不可能将$scope传递到工厂

例如,以下操作不起作用:

var serv = angular.module('myModule', [])

serv.factory('myService', ['$scope', '$injector', function ($scope, $injector) {
...
您可以使用来实现这一点,它将源对象的所有属性复制到目标对象中

例如:

(function () {
  var app = angular.module('angularjs-starter', []);

  var ParentCtrl = function ($scope, $location) {
    $scope.path = function () {
      return $location.absUrl();
    };
  };

  app.controller('ChildCtrl', function($scope, $injector) {
    $injector.invoke(ParentCtrl, this, {$scope: $scope});
    $scope.url = $scope.path();
  });
})();
(function () {
  var app = angular.module('angularjs-starter', []);

  app.factory('CalculatorFactory', function() {
    return {
      add: function(arg1, arg2) {
        return arg1 + arg2;
      }
    }
  });

  app.controller('MainCtrl', function($scope, CalculatorFactory) {
    angular.extend($scope, CalculatorFactory);

    // $scope now has the `add() fn`
    var result = $scope.add(1, 2);
  });

})();

你们不应该把范围传给工厂。这就是阻止您尝试做的事情的原因吗?我正在寻找一种方法来进行混音,以添加工厂方法。我提出的所有混音示例都是针对控制器的。在我发现的控制器示例中,始终使用$scope。控制器通常将作用域注入其中,而工厂则没有。您可以将rootScope注入工厂,但通常这是一种糟糕的做法。我希望能够向工厂或服务的方法中添加一些方法。有没有其他方法可以做到这一点?你可以将工厂注入到几乎任何有角度的组件中,并用其他方法和属性来装饰它。还有其他方法可以扩展它们。如果您想要更详细的答案,请更新您的问题,并提供有关您目标的更多细节。