angularjs使用$ .proxy时未定义

时间:2013-08-05 07:02:37

标签: javascript jquery rest angularjs

我有一个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);
    }
};

1 个答案:

答案 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));