我对范围,而不是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();
}
};
}]);
如果我在任何地方注入(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
的值,那么...好吧,它是对象本身的值,包括name
,xAxisFormatter
等。我该如何处理?这是正确的方法吗?
最佳答案
this
中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;
}]);
这样,您可以确保始终引用该对象。