3

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

我有一个factory叫它chartParsingHelpers是这样的:

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

如果我chartParsingHelpers在任何地方注入并调用doFancyStuff它,那效果很好。但是,我想为我的精美图表进行一些配置,因为它们共享代码结构,我认为围绕指令和所有朋友共享该配置非常好,所以我创建了这样的东西:

angular.module('visits')
  .factory('ChartTypes',['dateUtils', 'chartParsingHelpers', function(dateUtils, chartParsingHelpers){
    return {
      config : [
        {
          name : 'Chart 1',          
          xAxisFormatter : dateUtils.getFullHour,
          parseMethod : chartParsingHelpers.doFancyStuff
        }
      ]
    };
  }]);

我的计划是注入ChartTypes控制器和指令(现在),但随后我收到此错误:

TypeError: Object #<Object> has no method 'getInitArray'

如果我查看thisthen 的值...嗯,它是对象本身的值namexAxisFormatter等等...

我怎么能接近这个?这是正确的方法吗?

4

1 回答 1

3

thisin的上下文chartParsingHelpers.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;
 }]);

这样你就可以确保你总是引用那个对象。

于 2013-09-13T08:41:45.353 回答