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,你不使用它,这是一件好事,因为你忘了回报承诺