Angularjs 服务中的角度移动函数

Angularjs 服务中的角度移动函数,angularjs,Angularjs,我有一个功能,我现在需要在多个页面中使用,所以决定转移到一个服务中——但它并不像我期望的那样运行 因此,在我的HTML中,我有: <li ng-init="bg = underQBar(work.options)"> 现在我已经完成了我的服务: function barService($window){ var self = this; self.getBarColours = function(toWorkArray) { //copi

我有一个功能,我现在需要在多个页面中使用,所以决定转移到一个服务中——但它并不像我期望的那样运行

因此,在我的HTML中,我有:

<li ng-init="bg = underQBar(work.options)">
现在我已经完成了我的服务:

function barService($window){
      var self = this;

      self.getBarColours = function(toWorkArray) {
         //copied the implementation with the return here
      }
}
因此,在我的控制器中尝试以下操作:

$scope.underQBar = barService.getBarColours(toWorkArray);

但是,这不起作用,它没有从HTML中获取我发送的参数-这是一个微不足道的修复还是实现有问题?

以下是您的服务的正确定义:

angular.module("myModule").factory("BarService", ["$window", function($window){
    var service = {};

    service.getBarColours = function(toWorkArray){
         //copied the implementation with the return here
    };

    return service;
}]);
以下是将服务注入控制器的正确方法:

angular.module("myModule").controller("controllerName", ["BarService", function(BarService){
    var self = this;

    self.getBarColours = BarService.getBarColours;
}]);
下面是使用它的方法:

<li ng-init="bg = controllerName.underQBar(work.options)">
  • 说明:

    视图无法访问angular中的服务或工厂。视图只能调用控制器。 如果您的函数应该被多个控制器调用,您可以将此函数放在负责控制整个视图的全局控制器中。

    这就是问题所在:

    $scope.underQBar = barService.getBarColours(toWorkArray);
    
    在这里,您将服务函数调用的结果分配给qbar下的
    $scope.underQBar
    ,而您打算将其分配给函数本身

    这应该起作用:

    $scope.underQBar = barService.getBarColours;
    
    如果您想让读者更清楚地了解它是一个函数,只需执行以下操作:

    $scope.underQBar = function (toWorkArray) {
      return barService.getBarColours(toWorkArray);
    }
    

    你能试试这个吗<代码>$scope.underQBar=函数(toWorkArray){返回barService.GetBarColors(toWorkArray)}太好了,这很有效!这是最干净的实现方式吗?或者我可以改进吗?我想你可以做
    $scope.underQBar=barService.getbarcolors。原始代码的问题在于,您分配了
    getBarColor的结果(toWorkArray
    $scope。在Qbar
    下,不是函数本身。我不认为他们的服务定义有任何问题,他们只是使用
    。service
    而不是
    。factory
    如果使用
    。factory
    ,则需要返回服务对象。如果使用
    。service
    这个
    对象默认情况下,ject将返回。我发现原始问题注释中的回复有效。@georgeawg thx因为指向我,我忘记添加返回。但是您在哪里看到他的服务/工厂声明?
    
    $scope.underQBar = function (toWorkArray) {
      return barService.getBarColours(toWorkArray);
    }