棱角分叉的约翰和重复

时间:2015-11-08 23:23:45

标签: json angularjs angularjs-directive foreach

我对角度很新,而且我坚持不懈。 我正在使用名为RateInfoService的服务从API中提取数据。 JSON看起来像这样

enter image description here

  $scope.refreshData = function() { 
     RateInfoService.getMarket($scope.alarmingMarket).success(function(data) {
      if($scope.alarmingMarket.length <= 1){
         $scope.rate = [];
         $scope.rate.marketid = data.query.results.rate.id;
         $scope.rate.rate = data.query.results.rate.Rate;
         $scope.rate.updateTime = data.query.results.rate.Time;
         console.log($scope.rate);
  } else {
    angular.forEach(data.query.results.rate, function (value, key){
      $scope.rate = [];
      $scope.rate.marketid = data.query.results.rate[key].id;
      $scope.rate.rate = data.query.results.rate[key].Rate;
      $scope.rate.updateTime = data.query.results.rate[key].Time;
      console.log($scope.rate);
    });
   }
 })
}

并检查数组长度只是因为我将另一个URL作为API。 我尝试在视图中显示但它失败了,因为用户可以填写芯片..但它之后也可乐。该视图仅显示可乐,因为它会因为循环而覆盖芯片。 我尝试了两种不同的方式

<tr ng-repeat="rate in rates track by $index">
   <p>{{rate.marketid}} {{rate.rate}}</p>
   <p>Last price update {{rate.updateTime}} </p>
</tr> 

<tr ng-repeat="data.query.results.rate.id track by $index">
   <p>{{$index + 1}}</p>
   <p>{{rate.marketid}} {{rate.rate}}</p>
   <p>Last price update {{rate.updateTime}} </p>
</tr>

两者都只显示可乐。这可能是因为scope.rate = []但我在使用我的代码以及如何修复它。使用PHP我经常使用像foreach($prices as $index=>pricing){code}

这样的东西

但我怎么能用angular做,或者有人有修复或示例代码。

3 个答案:

答案 0 :(得分:1)

在你的循环中,你只是用最新的值替换前一个值,所以你最终只得到最后一个COLA值。

您需要将所有数组添加到数组中。 你可以简单地这样做

$scope.rates = data.query.results.rate

现在您有一个与API响应相同的数组。 循环使用

<tr ng-repeat="rate in rates">
    <td>{{rate.id}} - {{rate.rate}}</td>
    <td>Last price update {{rate.date}}</td>
</tr>

答案 1 :(得分:1)

我认为你是多次初始化数组。所以只需将for循环中的数组声明拉到外面。所以应该很好..

$scope.rate = []; // Pull this out of for Loop Like Below

$scope.refreshData = function() { 
    //Intialise Here
    $scope.rate = [];
     RateInfoService.getMarket($scope.alarmingMarket).success(function(data) {
      if($scope.alarmingMarket.length <= 1){
         $scope.rate = [];
         $scope.rate.marketid = data.query.results.rate.id;
         $scope.rate.rate = data.query.results.rate.Rate;
         $scope.rate.updateTime = data.query.results.rate.Time;
         console.log($scope.rate);
  } else {
    angular.forEach(data.query.results.rate, function (value, key){
      //Instead of Here
      $scope.rate.marketid = data.query.results.rate[key].id;
      $scope.rate.rate = data.query.results.rate[key].Rate;
      $scope.rate.updateTime = data.query.results.rate[key].Time;
      console.log($scope.rate);
    });
   }
 })
}

答案 2 :(得分:1)

  

答案非常简单,你做了一个误包我的朋友

你正在for循环中创建 $ scope.rate = [] 所以每次进入循环时它都会清空你的数组,所以for循环最后一个值将插入你的数组,你的循环停止,所以你只有可乐

<强>更新

请参阅此示例:Jersey download page

如果你使用表格进行ng-repate那么只有tr不工作你必须在它里面使用td在我的例子中看到我首先创建了两个表,但是第二个表正在工作。

  

注意:不要再次创建对象在范围内传递您的数据并使用   直接在ng-repate示例中:$ scope.dataObject =您的对象

参见示例。

<table>
        <tr ng-repeat="dataObject in data.results.rate">
            <td>{{$index + 1}}</td>
            <td>ID : {{dataObject.id}} - RATE: {{dataObject.Rate}}</td>
            <td>Last price update {{dataObject.Time}}</td>
        </tr>
</table>