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);
});
});
我是 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);
});
});