AngularJS控制器不使用ng-repeat

时间:2014-04-15 02:47:04

标签: javascript angularjs ruby-on-rails-4

我正在尝试使用一个控制器为表生成两个对象。控制器如下所示:

function LineItemController($scope, $http) {
  $scope.fields = [{id: 0}];
  $scope.addNewChoice = function() {
    $scope.fields.push({id: ($scope.fields.length)});
  }
  $scope.lineItems = [];
  $scope.getlineItems = function() {
    $http.get('<%= line_items_path(:json) %>?invoice_id=<%= params[:id] %>').then(function(lineItems) {
      console.log(lineItems);
      return $scope.lineItems;
    });
  };
 $scope.lineItems = $scope.getlineItems();
};

HTML如下:

<div ng-controller="LineItemController">
<table>
  <thead><th>Quanity</th><th>Description</th><th>Price Per</th><th>Discount</th><th>Line Item Total</th></thead>
      <tr ng-repeat="lineItem in lineItems">
        <td>{{ lineItem.name }}</td>
        <td>{{ lineItem.quantity }}</td>
    </tr>
  <tr ng-repeat="field in fields">
 ....
</tr>
</table>

第二次ng-repeat效果很好。第一个似乎没有遍历对象。我检查了控制台,并使用http get请求正确地拉入阵列。如果我预先填写读取$ scope.lineItems = [{“name”:15,“quantity”:12}];它将能够调用15和12.所以我认为我的代码中的分解是调用函数并将其设置为等于$ scope.lineItems。是否需要在调用我缺少的函数时包含其他[]或{}。我正在使用rails 4但已禁用turbolinks。

1 个答案:

答案 0 :(得分:0)

首先,您的函数$scope.getlineItems似乎没有返回任何内容。

此外,$ http.get方法将返回一个promise,因此您不希望将其直接分配给$scope.lineItems变量。而是在then回调中,将您的数据分配到$scope.lineItems

$scope.getlineItems = function() {
    $http.get('<%= line_items_path(:json) %>?invoice_id=<%= params[:id] %>').then(function(lineItems) {
      console.log(lineItems);
      $scope.lineItems = lineItems;
    });
  };
 $scope.getlineItems();