我有一些令人头疼的范围,而不是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
注入Controller并转换为指令(暂时)但我收到此错误:
TypeError: Object #<Object> has no method 'getInitArray'
如果我查看this
的值,那么......好吧,它是name
,xAxisFormatter
等对象本身的价值......
我怎么能接近这个?这是正确的方法吗?
答案 0 :(得分:3)
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;
}]);
这样你就可以确保你总是引用那个对象。