我正在使用angularJs v1.7
我需要从工厂加载对象,这工作得很好:
$scope.equipe = equipesFactoryLocalStorage.getEquipeMomentanee();
现在,我需要添加一个.then(),因为在对象加载后,我需要做一些事情:
equipesFactoryLocalStorage.getEquipeMomentanee().then(function(response){
$scope.equipe = response;
})
AngularJs在控制台内部提供了此错误:
TypeError: "equipesFactoryLocalStorage.getEquipeMomentanee(...).then is not a function"
我已经为此苦苦挣扎了,请帮帮我。
这是我的工厂:
monApp.factory('equipesFactoryLocalStorage',function(){
var factory = {};
/* Charger une equipe momentanee */
factory.getEquipeMomentanee = function(equipe){
if(JSON.parse(localStorage.getItem("equipe"))!=null){
var equipe = JSON.parse(localStorage.getItem("equipe"));
}
else{
var equipe = {};
equipe.attaquants = [];
equipe.ailiers_gauche = [];
equipe.attaquants_soutien = [];
equipe.ailiers_droits = [];
equipe.milieu_gauche = [];
equipe.milieu_soutien = [];
equipe.milieu_droit = [];
equipe.defense_gauche = [];
equipe.defense_soutien = [];
equipe.defense_droit = [];
equipe.liberos = [];
equipe.goal = [];
equipe.img = "img/new.png";
equipe.date_creation = new Date();
}
return equipe ;
}
return factory
})
请帮助我,我不明白为什么.then()无法运行,而没有.then()则无法运行 我已经尝试过angularjs 1.5,并且有相同的错误。
我已经看过几篇有关此的帖子,没有人在工作,我已经尝试过了:
equipesFactoryLocalStorage.getEquipeMomentanee().$promise.then(function(response){
$scope.equipe = response;
})
它也不起作用。这不是重复的帖子,它实际上是行不通的。
编辑:谢谢弗兰克·莫迪卡,现在已解决:
我已经这样改变了我的工厂(请注意$ q):
monApp.factory('equipesFactoryLocalStorage',function($q){
var factory = {};
/* Charger une equipe momentanee */
factory.getEquipeMomentanee = function(equipe){
if(JSON.parse(localStorage.getItem("equipe"))!=null){
var equipe = JSON.parse(localStorage.getItem("equipe"));
}
else{
var equipe = {};
equipe.attaquants = [];
equipe.ailiers_gauche = [];
equipe.attaquants_soutien = [];
equipe.ailiers_droits = [];
equipe.milieu_gauche = [];
equipe.milieu_soutien = [];
equipe.milieu_droit = [];
equipe.defense_gauche = [];
equipe.defense_soutien = [];
equipe.defense_droit = [];
equipe.liberos = [];
equipe.goal = [];
equipe.img = "img/new.png";
equipe.date_creation = new Date();
}
return $q.resolve(equipe);
}
return factory
})
现在,它运行良好,.then()正确返回了我的对象!
答案 0 :(得分:1)
如果要将其转换为异步方法,则需要返回一个Promise。注入$q
服务并执行:
return $q.resolve(equipe);
如果以后将其更改为HTTP调用,则无需手动创建Promise。 $http
服务将为您做到这一点,因此您可以这样做:
return $http.get(...);
但是,如果您不需要将此作为异步方法,则不需要诺言。您可以按原样保留服务,然后执行以下操作:
$scope.equipe = equipesFactoryLocalStorage.getEquipeMomentanee();
// Do something else