0

我在使用 angularjs 从我的服务中获取一些 json 信息时遇到问题。

我已经从谷歌下载了这个例子并修改了它以从数据库中获取我想要的信息。但它似乎没有工作,我不知道它在哪里坏了。这是我的 service.js 代码:

angular.module('productServices', ['ngResource']).
    factory('Product', function ($resource) {
        return $resource('http://dev.integrator.blondgorilla.com/integratorservice/getproducts?min=0&max=15', {}, {
            query: { method: 'GET', params: { ProductID: 'products' }, isArray: true }
        });
    });

和控制器看起来像这样

function ProductListCtrl($scope, Product) {
    $scope.products = Product;
}

product-list.html 页面如下:

<div class="span10">
    <!--Body content-->

    <ul class="products">
        <li ng-repeat="product in products" class="thumbnail">
            <p>{{product.ProductID}}</p>
        </li>
    </ul>
</div>

主要的 js 文件是 AngularSpike.js

'use strict';
angular.module('ProsPhere', ['productFilters', 'productServices']).
  config(['$routeProvider', function ($routeProvider) {
      $routeProvider.
          when('/products', { templateUrl: 'partials/product-list.html', controller: ProductListCtrl }).
          when('/products/:productId', { templateUrl: 'partials/product-details.html', controller: ProductDetailCtrl }).
          otherwise({ redirectTo: '/products' });
  }]);

我使用和修改的代码可以从

https://github.com/angular/angular-phonecat.git

谢谢,

基亚努什


到目前为止我发现了两个问题:

1- 正如 Marek 所说 .query() 2- 我正在调用不同的域,我应该使用 JSONP

angular.module('productServices', ['ngResource']).
    factory('Product', function ($resource) {
        var test = $resource('http://dev.integrator.blondgorilla.com/integratorservice/getproducts', {}, {
            query: { method: 'JSONP', params: { minid: '0', maxid: '70' }, isArray: true }
        });

        return test;
    });

但我仍然看不到产品

4

2 回答 2

0

Here's the first issue:

function ProductListCtrl($scope, Product) {
   $scope.products = Product;
}

and that is that you are assigning $resource to scope instead of some results which can be retrieved by that $resource class.

Try this:

function ProductListCtrl($scope, Product) {
   $scope.products = Product.query();
}

If there's still something wrong then I can help you if you create running plnkr or something like that.

于 2013-04-08T09:46:00.123 回答
0

$resource 对象方法立即返回一个空引用(对象或数组取决于 isArray)。一旦数据从服务器返回,现有的引用就会填充实际的数据。所以在这里ProductListCtrl我们需要回调函数来处理这个问题。您可以使用以下代码替换控制器:

function ProductListCtrl($scope,Product){
    Product.query(function(data) {
        $scope.products=data;
    });
}

或者你可以使用这个:

 function ProductListCtrl($scope, Product) {
       Product.query()
         .$promise.then(function(data) {
           $scope.products=data;
         });
    }
于 2014-08-25T14:00:42.220 回答