Javascript 提供Json AngularJS的服务
嗨,我对这项服务有问题Javascript 提供Json AngularJS的服务,javascript,angularjs,angular-services,Javascript,Angularjs,Angular Services,嗨,我对这项服务有问题 app.service('myStorage',function($http, $localStorage){ this.getFilms = function(){ /* Carga la lista de peliculas de localStorage si existe*/ if ($localStorage.films && $localStorage.films.length!=0) { return $loc
app.service('myStorage',function($http, $localStorage){
this.getFilms = function(){
/* Carga la lista de peliculas de localStorage si existe*/
if ($localStorage.films && $localStorage.films.length!=0) {
return $localStorage.films;
console.log($localStorage.films);
}else{
$http.get("json/films.json")
.then(function(res){
console.log(res.data);
return res.data;
});
}
}
}))
此console.log工作正常,并为我提供了一个对象数组,但在控制器中:
function($scope, $mdDialog, $http, $localStorage, myStorage) {
$scope.films=myStorage.getFilms();
console.log($scope.films);
控制台显示未定义,有帮助吗?您应该返回一个承诺。像这样:
app.service('myStorage',function($http, $localStorage, $q){
this.getFilms = function(){
if ($localStorage.films && $localStorage.films.length!=0) {
return $q.when($localStorage.films);
} else {
return $http.get("json/films.json").then(function(res){
console.log(res.data);
return res.data;
});
}
}
});
现在在控制器中
function($scope, $mdDialog, $http, $localStorage, myStorage) {
myStorage.getFilms().then(function(res) {
$scope.films = res;
console.log($scope.films);
})
...
})
你应该回报一个承诺。像这样:
app.service('myStorage',function($http, $localStorage, $q){
this.getFilms = function(){
if ($localStorage.films && $localStorage.films.length!=0) {
return $q.when($localStorage.films);
} else {
return $http.get("json/films.json").then(function(res){
console.log(res.data);
return res.data;
});
}
}
});
现在在控制器中
function($scope, $mdDialog, $http, $localStorage, myStorage) {
myStorage.getFilms().then(function(res) {
$scope.films = res;
console.log($scope.films);
})
...
})
很可能您没有正确地注入依赖项。您可以发布整个控制器的代码吗?您指的是哪一个console.log,是if中的还是else中的?如果控制台中正在打印什么?可能是因为在解决承诺之前分配了
$scope.films
,导致未分配的结果值。您的服务是async@VadimLanda这是值得怀疑的,因为他会得到一个引用错误,很可能你没有正确地注入依赖项。您可以发布整个控制器的代码吗?您指的是哪一个console.log,是if中的还是else中的?如果控制台中正在打印什么?可能是因为在解决承诺之前分配了$scope.films
,导致未分配的结果值。您的服务是async@VadimLanda这是值得怀疑的,因为他会得到一个参考错误,这是正确的,但是考虑使用$Q。然后,第一个分支只是一行。code@AluanHaddad当然说得好,我太习惯这个了谢谢!最棒的!如果我能投票两次……因为习惯了,至少你打破了这个循环,因为HTTP不需要Q,而且你不使用它,这是一个很好的东西,因为你忘了返回约定。这是正确的,但是考虑使用$Q。然后,第一个分支只是一行。code@AluanHaddad苏尔e、 很好的一点,太习惯于这个了。:(将更新它。谢谢!太棒了!如果我能投两次票…至于习惯,至少你打破了$http的循环,那里不需要Q,你不使用它,这是一件好事,因为你忘了回报承诺