AngularJs 从两个地方调用的服务 returns 相同的值

AngularJs Service called from two places returns same value

我是 angular 的新手,请原谅我的无知。我正在尝试创建一个简单的服务,它将执行获取功能并将数据提供给数组。 我遇到的问题是,无论我做什么 - 我总是为我传递的任何参数获得相同的数据。

这是我的示例服务

function myService($http, $q) {
    var service = {
        getSomeData: getSomeData:

    };
    var def = $q.defer();

    return service;

    function getSomeData(category) {


        if (category === 'books') {
            url = 'http://www.someurl1';
        } else {
            url = 'http://www.someurl2'
        };

        $http.get(url, {
            params: {
                'type': category
            }

        }).success(function(data) {
            def.resolve(data);
        }).error(function() {
            def.reject('Failed to get data');
        });
        return def.promise;
    }
}

})();

一旦我有了这个,在我的控制器中,我试图像这样调用它来实现示例目的

$scope.someData = [] ;
$scope.someData.push(myService.getSomeData('DVDs'); 
$scope.someData.push(myService.getSomeData('books');

现在,当我查看我的 $scope.someData 时, 我有两个对象的数组 - 问题是它们总是相同的并且没有特定于书籍和 dvd 的数据。

我遇到的另一个小问题是我的对象 someData 有

array --> Promise -- > $$state --> value

然后有实际数据。我怎样才能直接获取数据。 我试过了 return def.promise(data);

一个问题是您只在 getSomeData 函数之外创建了一个承诺。

一个承诺只能解决一次。每个请求都需要一个新的承诺。

另外 $http 已经 returns 一个承诺,但你不能将它作为数据直接推入数组。

您的代码应该更像:

服务:

function myService($http, $q) {
  var service = {
    getSomeData: getSomeData
  };


  return service;

  function getSomeData(category) {

    if (category === 'books') {
      url = 'http://www.someurl1';
    } else {
      url = 'http://www.someurl2'
    };

    return $http.get(url, {
      params: {
        'type': category
      }
    }).then(function(response) {
      return response.data;
    }).catch(function(err) {
      console.log("Ooops", err)
    });
  }
}

控制器

$scope.someData = [] ;
myService.getSomeData('DVDs').then(function(data){
   data.forEach(function(item){
       $scope.someData.push(item);
   });
});