Ios 如何使用API在Ionic上调用数据
我编辑了我的代码Ios 如何使用API在Ionic上调用数据,ios,angularjs,html,ionic,Ios,Angularjs,Html,Ionic,我编辑了我的代码 .factory('ProductsService',['$ionicSideMenuDelegate', '$http', 'ApiEndpoint', '$ionicTabsDelegate', '$ionicSlideBoxDelegate', '$stateParams', 'AuthService', function($ionicSideMenuDelegate, $http, ApiEndpoint, $ionicTabsDelegate, $ionicSlid
.factory('ProductsService',['$ionicSideMenuDelegate', '$http', 'ApiEndpoint', '$ionicTabsDelegate', '$ionicSlideBoxDelegate', '$stateParams', 'AuthService', function($ionicSideMenuDelegate, $http, ApiEndpoint, $ionicTabsDelegate, $ionicSlideBoxDelegate, $stateParams, AuthService){
var products = [];
var prod = [];
return {
GetProducts: function(){
return $http.get(ApiEndpoint.url + '/products', {}).then(function(response){
products = response.data.products;
return response;
});
},
GetProduct: function(productId){
angular.forEach(products, function(product, key){
$scope.prod = {}; //ERROR: $scope is not defined
if(product.id == productId){
prod = product;
return product;
}
})
return prod;
}
}
}])
…单击该项目后,出现错误..而页面未显示必须显示的详细信息..我不确定是否收到了您的问题 通常每个视图都有自己的控制器。因此,在您的示例中,一个控制器用于menu.html和productpage。当然,也可以对两个视图使用相同的控制器。 如果要为两个视图使用一个控制器,则控制器可以为两个视图提供数据 如果希望每个视图都有一个控制器,则必须在控制器之间共享数据。对于在不同控制器之间共享数据,您可以找到很多帮助: - - 在这两种解决方案中,您都必须在此服务中调用api。为此,您应该了解angularjs的$q概念和承诺: 如果您能指定要从哪个页面调用到另一个页面的数据,我可以改进此答案 编辑: 根据你的评论,我可以补充以下建议。在your products.html中,您希望显示所选产品的详细信息。粗略地说,这是一个主要的细节模式。你可以看看这个: 您必须更改状态配置并为产品详细信息添加状态。类似的内容(您必须更改代码): 在控制器中,您可以通过状态参数获取给定的:id:
var productId= $stateParams.id;
要实现它,您还必须编辑menu.html。对于每个产品,您都需要一个如下链接:
<a href="#/product/{{product.id}}">{{product.name}}</a>
这必须在您的ng repeat中进行包装。但这些都是在给定的页面上描述的
当然,您也可以选择其他服务。您正在寻找服务吗?以前有很多关于这个主题的帖子:GetProducts方法需要返回一个承诺。目前它什么都不做。将
$http.get
更改为返回$http.get
你好@Andrew McGivery我编辑了我的问题,你能帮我吗??。谢谢你读了我最后的评论吗?你仍然没有兑现承诺。或许可以试着阅读这篇文章来理解承诺在爱奥尼亚的环境中是如何工作的。您好@Andrew McGivery谢谢,我已经阅读了您的上一条评论并尝试了它,但仍然得到相同的问题没有输出..我编辑了我的代码请检查..谢谢..您好@RH34Serenity,您可以添加您所在州的代码吗。在某些地方,您应该具有如下状态配置:。状态('productDetails',{url:/product/:id',templateUrl:'templates/product.html',控制器:'yourCtrl'});你把一些事情搞砸了带有url productpage/:id的http get不会指向任何内容。您仍然应该在这里调用api—问题是这一行:var productId=$stateParams.id$scope.product=ProductsService.GetProduct(productId);仅在实例化控制器时调用一次。您现在可以为该detailState编写第二个控制器,并将这些状态连接在一起。
<a href="#/product/{{product.id}}">{{product.name}}</a>