我在服务中遇到以下代码时出现问题:
angular.module('my_proj').factory('artistService',
function($injector, $ionicListDelegate, $rootScope, $state,
$stateParams, $timeout, $translate, SomeStore,
appConstants, appService, coreService, moment, loginService) {
return {
goToMedia: function(artistId, state) {
var self = this;
SomeStore.findByPk(artistId, {}, function(reminder) {
// works
$injector.get('artistService').applyMusicFilter(reminder);
// throws "applyMusicFilter is not a function"
self.applyMusicFilter(reminder);
}
}
}
我怀疑解释器运行我的代码的顺序是个问题。使用$ injector调用相同的函数,可以正常工作,但是使用self作为对此的引用直接调用它不会。
有谁能告诉我,这里的问题是什么以及我做错了什么?
提前致谢!
答案 0 :(得分:0)
让它发挥作用的一种方法是使用function declaration:
app.factory('artistService', function($injector, $ionicListDelegate,
$rootScope, $state, loginService) {
return {
applyMusicFilter: applyMusicFilter,
goToMedia: function(artistId, state) {
//Invoke hoisted function
applyMusicFilter("whatever");
}
};
//Function declaration
function applyMusicFilter(reminder) {
console.log(reminder)
}
})
在JavaScript中,函数定义为hoisted。您可以在声明之前使用该功能。
答案 1 :(得分:0)
此处self
引用goToMedia
函数,该函数没有applyMusicFilter
的定义,因为您有未定义的错误。
$injector
方法有效,因为它返回工厂创建的对象,其中包含所有方法定义。