我有一个UserApplications对象,它向服务器查询用户注册的应用程序列表,如下所示:
data.factory('UserApplications', function($resource){
return $resource('/users-rs/api/getapplications/:locale',{},{
query: {method: 'GET', params: {locale: 'locale'}, isArray: true}
});
});
我在另一个服务中调用它,并希望使用angular-localstorageservice模块(https://github.com/grevory/angular-local-storage)将数据保存为JSON字符串,该模块传递给服务的构造函数,如下所示:
function UserService(UserInfoData, localStorageService, UserApplications){
this.UserInfoData = UserInfoData;
this.localStorageService = localStorageService;
this.userApplications = UserApplications;
}
当我给$ resource.query()函数提供一个回调函数并用$ .proxy包装它时,我继续得到this.localstorag是未定义的,当我调试它时这是对window的引用。所以不完全是我期望的行为。
有没有其他方法可以将'this'或对象的引用传递给回调函数?
我已经尝试过创建一个带有对此引用的变量,但它也没有做到这一点:/
UserService.prototype.getUserApplications = function(){
var locale = this.getUserinfoLocale();
var applications = this.localStorageService.get(Constants.key_applications+locale);
if(applications !== null){
return JSON.parse(applications);
} else {
return this.userApplications.query({locale: locale}, $.proxy(function(data, locale){
this.localStorageService.add(Constants.key_applications+locale, JSON.stringify(data));
}), this);
}
};
答案 0 :(得分:1)
我认为你错过了逗号位置并将“this”发送到userApplications的查询方法,而不是jQuery的代理方法。
请在“其他”块中尝试此操作:
return this.userApplications.query({locale: locale}, $.proxy(function(data, locale){
this.localStorageService.add(Constants.key_applications+locale, JSON.stringify(data));
}, this));