Angular - 将功能转移到服务中

时间:2016-03-18 15:11:04

标签: angularjs

我有一个功能,我现在需要在多个页面中使用,所以决定进入一项服务 - 但它不会像我期待的那样。

所以在我的HTML中我有:

<li ng-init="bg = underQBar(work.options)">

然后在控制器中(在我移动公共功能之前)它看起来像:

$scope.underQBar = function(toWorkArray) {
  //some implementation, with a return at the end
}

现在我已经完成了我的服务:

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

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

因此在我的控制器中尝试这个:

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

然而,这不起作用,它没有得到我从HTML发送的参数 - 这是一个微不足道的修复或实施的错误吗?

2 个答案:

答案 0 :(得分:2)

这是问题所在:

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

在这里,您要将服务函数调用的结果分配给$scope.underQBar,当您打算为其分配函数时。

这应该有效:

$scope.underQBar = barService.getBarColours;

如果你想让读者更清楚它是一个功能,那就做:

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

答案 1 :(得分:0)

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

Sub RefreshPivotData()
Dim pvotCht As PivotTable, Sheet As Worksheet
    For Each Sheet In ThisWorkbook.Worksheets
        For Each pvotTbl In Sheet.PivotTables
            pvotTbl.RefreshTable
            pvotTbl.Update
        Next
    Next
ThisWorkbook.Save
End Sub

这是在控制器中注入服务的正确方法:

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;
}]);

说明:

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