0

我有一个 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 是未定义的,当我调试它时,这是对窗口的引用。所以不完全是我预期的行为。
有没有其他方法可以将“this”或对对象的引用传递给回调函数?
我已经尝试过创建一个引用 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);
    }
};
4

1 回答 1

1

我认为您错过了逗号位置并将“this”发送到 userApplications 的查询方法,而不是 jQuery 的代理之一。

在你的“else”块中试试这个:

return this.userApplications.query({locale: locale}, $.proxy(function(data, locale){
    this.localStorageService.add(Constants.key_applications+locale, JSON.stringify(data));
}, this));
于 2013-09-10T03:24:13.460 回答