我正在尝试创建一个将AJAX调用的结果存储在变量中的工厂。到目前为止,我有以下几点:
angular.module('frontApp')
.factory('myFactory', function(Restangular) {
var myFactory = function() {
this.loadedData = [];
loadData()
}
var loadData = function() {
Restangular.all('endPoint').customGET('path/run').then(
function(success) {
this.loadedData = success.results;
}
);
}
return stoppingPatternFactory;
});
但我收到错误:cannot set property 'loadedData' of undefined
。
我理解这个上下文中的this
关键字是指函数上下文,这就是我收到错误的原因。问题是当Restangular调用是异步的时候,我无法解决如何在第一个函数中设置this.loadedData
的问题。我试过在第一个函数中发出请求并尝试在回调中设置变量,但是我得到了同样的错误。
编辑:我应该补充一点,我正在尝试创建这个工厂的多个实例,例如: var f = new myFactory()
以便指令的每个实例都有自己的工厂关联。
答案 0 :(得分:1)
你需要设置loadedData然后回调
angular.module('frontApp')
.factory('myFactory', function(Restangular) {
var myFactory = function() {
var self = this;
self.loadedData = [];
loadData().then(function(data){
self.loadedData = data;
})
}
var loadData = function() {
var restApi = Restangular.all('endPoint')
return restApi.customGET('path/run').then(
function(success) {
return success.results;
}
);
}
return stoppingPatternFactory;
});
答案 1 :(得分:0)
我相信你要找的是“打电话”或“申请”。它允许您在设置其“this”引用时调用方法。然后,您可以保存该引用并在任何位置设置其属性。这样的事情应该有效。
angular.module('frontApp')
.factory('myFactory', function(Restangular) {
var myFactory = function() {
this.loadedData = [];
loadData.call(this);
}
var loadData = function() {
var self = this;
Restangular.all('endPoint').customGET('path/run').then(
function(success) {
self.loadedData = success.results;
}
);
}
return myFactory;
});