我对范围,而不是Angular范围,但JavaScript本身有些头疼。

我有一个称为factorychartParsingHelpers,它是这样的:

angular.module('myApp')
  .factory('chartParsingHelpers',['dateUtils', function(dateUtils){
    return {
      getInitArray : function(){
        return [ 'Stuff', 'Stuff 2' ];
      },
      doFancyStuff : function (data){
        var initArray = this.getInitArray();
      }
    };
  }]);

如果我在任何地方注入(inject)chartParsingHelpers并调用doFancyStuff,它将很好用,效果很好。但是,我想为我的花式图表添加一些配置,因为它们共享代码结构,并且我认为在指令和所有 friend 之间共享该配置非常好,因此,我创建了以下内容:
angular.module('visits')
  .factory('ChartTypes',['dateUtils', 'chartParsingHelpers', function(dateUtils, chartParsingHelpers){
    return {
      config : [
        {
          name : 'Chart 1',
          xAxisFormatter : dateUtils.getFullHour,
          parseMethod : chartParsingHelpers.doFancyStuff
        }
      ]
    };
  }]);

我的计划是将ChartTypes注入(inject)Controller和指令(目前),但是随后收到此错误:
TypeError: Object #<Object> has no method 'getInitArray'

如果我研究this的值,那么...好吧,它是对象本身的值,包括namexAxisFormatter等。

我该如何处理?这是正确的方法吗?

最佳答案

thischartParsingHelpers.doFancyStuff的上下文可能是问题所在。我将这样创建工厂:

angular.module('myApp')
  .factory('chartParsingHelpers',['dateUtils', function(dateUtils){

    var self = {};

    self.getInitArray = function() {
      return ['Stuff', 'Stuff 2'];
    };

    self.doFancyStuff = function(data) {
      var initArray = self.getInitArray();
    };

    return self;
 }]);

这样,您可以确保始终引用该对象。

09-25 16:00