在找到商店后使用此代码我希望angular从商店列表(商店)中获取正确的商店,但我无法确定如何将商店ID输入到商店查询列表中。
app.factory('Stores', function ($resource) {
return $resource('/rest/stores/:id',{ id: '@id' });
});
app.factory('FindStore', function ($resource) {
return $resource('/rest/locator/:input',{ input: '@input' });
});
app.controller('baseCtrl', function($scope, $http, Stores, FindStore, $location, $filter) {
fetchStore($scope.locator);
var id = $scope.store.id;
console.log(id); //returns undefined
$scope.myStore = Stores.query({id:id}); //fetch all the stores instead of one
function fetchStore(input){
$scope.store = FindStore.get({input:input});
var id = $scope.store.id;
console.log(id); //returns id
}
});
感谢您的帮助,并提前感谢您
答案 0 :(得分:0)
$resource
函数是异步的,并使用promises来提供结果。所以你需要像这样使用FindStore
:
FindStore.get({input: input}).$promise.then(function(result){
// print out the result of the query
console.log(result);
});
基本上,您的代码在查询返回结果之前尝试打印id
。 FindStore.get
并不等待答案,它基本上会说,&#34;嘿,你能不能查询服务器,并在收到结果时运行promise函数。&#34; < / p>
我建议您阅读:https://docs.angularjs.org/api/ng/service/ $ q
编辑:如果你想使用一个查询的结果作为另一个查询的参数,有几种方法,但最简单的解释是只使用第一个promise结果中的结果。例如
FindStore.get({input: input}).$promise.then(function(result){
// get the store id from the result (this is a guess and depends on how you setup your data
var id = result.store.id;
// use the id in the next query
Stores.query({id: id}).$promise.then(function(storeResult){
// do something with the store result
console.log(storeResult);
});
});
请注意您如何执行一个查询,当它返回结果时,您可以使用它来运行下一个查询。然后,下一个查询成为它自己的promise,它在返回该查询时运行result函数。
现在我已经编写了用于理解目的的示例,但是这不是编写promise的非常好的方法。请阅读它们,并再次阅读它们,因为如果你继续使用js,你将在任何地方使用它们。