Javascript 设置本地变量作为工厂中Ajax调用的结果
我试图创建一个工厂,将AJAX调用的结果存储在一个变量中。到目前为止,我有以下几点:Javascript 设置本地变量作为工厂中Ajax调用的结果,javascript,angularjs,factory,Javascript,Angularjs,Factory,我试图创建一个工厂,将AJAX调用的结果存储在一个变量中。到目前为止,我有以下几点: angular.module('frontApp') .factory('myFactory', function(Restangular) { var myFactory = function() { this.loadedData = []; loadData() } var loadData =
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;
});
但我得到一个错误:无法设置未定义的属性'loadedData'。
我知道此上下文中的this
关键字指的是函数上下文,这就是我得到错误的原因。问题是,当重新启动的调用是异步的时,我无法理解如何在第一个函数中设置this.loadedData
。我尝试在第一个函数中发出请求,并尝试在回调中设置变量,但我得到了相同的错误
编辑:我可能应该补充一点,我正在尝试创建此工厂的多个实例,例如,
var f=new myFactory()
,以便指令的每个实例都有自己的关联工厂。我相信您正在寻找的是“调用”或“应用”。它允许您在设置方法的“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;
});
您需要在回调中设置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;
});
在工厂中使用“this”是错误的。检查这篇文章是否正确使用:嗯-我只是简单地看了一下,但似乎他们正在为工厂设置全局变量,这些变量将可用于工厂的所有实例,我需要只可用于每个实例的变量。工厂和服务是单例的-它们是全局的。但是您可以实现一个getInstance(),它在每次调用新对象时都返回一个新对象。