首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用角将本地Web服务器的JSON数据输出到Ionic应用程序

使用角将本地Web服务器的JSON数据输出到Ionic应用程序
EN

Stack Overflow用户
提问于 2015-08-20 20:08:06
回答 1查看 4.1K关注 0票数 0

挑战性

我正试图通过角JS将以下JSON输出到我的Ionic Framework初学者侧菜单应用程序中,目前我从控制台日志中得到的唯一响应如下:

代码语言:javascript
运行
复制
0     825606   log      ApiEndpoint, [object Object]
1     825809   log      Got some data: , [object Object]
1     825883   log      Got some data: , [object Object]

不幸的是,由于这个原因,我无法在products.html中显示我的产品列表

使用本地node.js数据库从我的Web服务器输出JSON

我的webserver输出可在http://localhost:8080/api/products上使用。

代码语言:javascript
运行
复制
[
{
_id: "55be0d021259c5a6dc955289",
name: "Apple",
price: 2.5
},
{
_id: "55be0d541259c5a6dc95528a",
name: "Oranges",
price: 1.5
},
{
_id: "55be0d6c1259c5a6dc95528b",
name: "Pear",
price: 3
},
{
_id: "55be0d6c1259c5a6dc95528c",
name: "Orange",
price: 3
}
]

services.js

代码语言:javascript
运行
复制
angular.module('starter.services', [])

.factory('Api', function($http, ApiEndpoint) {
  console.log('ApiEndpoint', ApiEndpoint)

  var getApiData = function() {
    return $http.get(ApiEndpoint.url + '/products')
      .then(function(products) {
        console.log('Got some data: ', products);
        return products;
      });
  };

  return {
    getApiData: getApiData
  };
})

controllers.js相关码

代码语言:javascript
运行
复制
.controller('ProductsCtrl', function($scope,Api) {
  $scope.products = null;
  Api.getApiData()
  .then(function(result) {
    $scope.products = result.products;
  })

ionic.project

代码语言:javascript
运行
复制
{
  "name": "grocerApp",
  "app_id": "",
  "proxies": [
    {
      "path": "/api",
      "proxyUrl": "http://cors.api.com/api"
    }
  ]
}

显示输出的products.html

代码语言:javascript
运行
复制
<ion-view view-title="The Grocer Shop">
  <ion-content>
    <ion-list>
      <ion-item ng-repeat="product in products">
        <a class="item item-thumbnail-left" href="#/app/products/{{product.id}}">
        <img src="http://loremflickr.com/30/30/apples">
        <h2>{{product.name}}</h2>
        <p>EUR {{product.price}} per kilogram</p>
      </a>
      </ion-item>
    </ion-list>
  </ion-content>
</ion-view>

app.js相关码

代码语言:javascript
运行
复制
angular.module('starter', ['ionic', 'starter.controllers','starter.services'])

.constant('ApiEndpoint', {
  url: 'http://localhost:8080/api'
})

不幸的是,以下链接并没有帮助我:

Ionic/Angular App not reading json data from api

Getting data from a json file in IONIC using AngularJS

我还双重检查了文件路径,并在本地浏览器窗口中很好地加载了JSON [我正在使用具有CORS扩展启用的Chrome - https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en ]。

问题

如何将本地get服务器上的JSON数据输入到products.html文件中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-20 20:13:00

您的服务和控制器有点错误,请尝试以下操作

services.js

代码语言:javascript
运行
复制
angular.module('starter.services', [])
    .factory('Api', function($http, ApiEndpoint) {
        console.log('ApiEndpoint', ApiEndpoint);

        var getApiData = function() {
            return $http.get(ApiEndpoint.url + '/products');
        };

        return {
            getApiData: getApiData
        };
})

controllers.js

代码语言:javascript
运行
复制
.controller('ProductsCtrl', function($scope,Api) {
  $scope.products = null;

  Api.getApiData().then(function(result) {
          $scope.products = result.data;
  });

编辑:进一步解释

所以你的第一个问题是返回一个承诺,并试图在多个地方解决它。

代码语言:javascript
运行
复制
return $http.get(ApiEndpoint.url + '/products')
  .then(function(products) {
    console.log('Got some data: ', products);
    return products;
  });

Api.getApiData()
.then(function(result) {
    $scope.products = result.products;
 })

最佳实践是,您的服务返回承诺,$http已经这样做了。然后,您应该处理如何在控制器中解决这个承诺,因此,基本上,我所做的只是将.then从工厂中删除。

下一个错误是试图在函数内部调用result.products。承诺是如何解决的,就是在带有数据属性的json对象中嵌套整个身体。因此,在这种情况下,您的响应看起来是{'data':array_of_fruit}。如果您的响应是返回{‘products’:Arrayof果树},那么您仍然必须像result.data.products那样访问。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32127415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档