2015-09-11 6 views
5

Unten ist mein Plunker, wo ich versucht habe, die Daten unter jeder Kategorie anzuzeigen.Aber die Daten werden nicht wie erwartet gedruckt .Beispiel: -von Wert 12345 sollte direkt unter Brot kommen . Ich bin nicht sicher, wo ich falsch in meinem Code tun:Nicht in der Lage, korrekte Daten in der Tabelle anzuzeigen -AngularJS

$scope.allProducts = []; 
    angular.forEach($scope.data,function(item, index){ 
    angular.forEach(item.products, function(item2, index){ 
     if($scope.allProducts.indexOf(item2.consummable) == -1){ 
     $scope.allProducts.push(item2.consummable); 
     } 
    }) 
    }) 

Creating a table matrix

+0

geben uns alle Infos, die Json Antwort Beispiel den Code der Anfrage an den Backend und etc. – num8er

+0

JSON ist es in der plunker.The Anordnung von Daten in Die Tabelle ist, was benötigt wird – forgottofly

+0

'ng-repeat' nicht tun etwas außer einfache Schleife, also, wenn Ihre' Artikel' haben ein _product_ render es nur _cell_. Also müssen Sie Ihre Daten vorverarbeiten, oder den Ausdruck für 'ng-repeat' ändern :-) – Grundy

Antwort

2

Noch eine andere Variante mit geändert ng-repeat Ausdruck. Da Sie alle Produkte in der ersten Zeile wiederholen, müssen Sie es wiederholen und in anderen, und filtern Sie Daten für ausgewählte Wert. Siehe Codeausschnitt unten

var app = angular.module('plunker', []); 
 

 
app.controller('MainCtrl', function($scope) { 
 
    $scope.name = 'World'; 
 
    $scope.data =[ 
 
    { 
 
     "resource": "100", 
 
     products: [ 
 
      { 
 
       "consummable": "milk", 
 
       "rom": 1 
 
      }, 
 
      
 
     ] 
 
    }, 
 
    { 
 
     "resource": "200", 
 
     products: [ 
 
     
 
      { 
 
       "consummable": "bread", 
 
       "rom": 12345 
 
      }, 
 
      
 
     ] 
 
    }, 
 
    { 
 
     "resource": "300", 
 
     products: [ 
 
     
 
      { 
 
       "consummable": "butter", 
 
       "rom": 123456789 
 
      } 
 
     ] 
 
    } 
 
]; 
 

 
    $scope.allProducts = []; 
 
    angular.forEach($scope.data,function(item, index){ 
 
    angular.forEach(item.products, function(item2, index){ 
 
     if($scope.allProducts.indexOf(item2.consummable) == -1){ 
 
     $scope.allProducts.push(item2.consummable); 
 
     } 
 
    }) 
 
    }) 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.17/angular.min.js"></script> 
 
<div ng-app="plunker" ng-controller="MainCtrl"> 
 
    <p>Hello {{name}}!</p> 
 

 
    <table style="border:1px solid red;"> 
 
    <tr> 
 
     <td> 
 
     </td> 
 
     <td ng-repeat="itemProd in allProducts" style="border:1px solid red;"> 
 
     {{itemProd}} 
 
     </td> 
 
    </tr> 
 
    <tr ng-repeat="item in data"> 
 
     <td> 
 
     {{item.resource}} 
 
     </td> 
 
     <td ng-repeat="item2 in allProducts" style="border:1px solid red;" ng-init="product=(item.products | filter: {consummable:item2})[0]"> 
 
     <a>{{product.rom}}</a> 
 
     </td> 
 
    </tr> 
 
    </table> 
 
    {{allProducts}} 
 
    {{data}} 
 
    
 
</div>

+0

Grundy, können Sie plesae den Filter erklären? filter: {consumable: item2}) [0] – forgottofly

+1

@forgottofly, sicher: [filter] (https://docs.angularjs.org/api/ng/filter/filter) ist Standart Filter, wir übergeben Objekt als Parameter das heißt Finden Sie Objekte, wo "Consumable" -Eigenschaft ist gleich wie "item2", und so filter return array gefilterte Elemente, wir versuchen einfach zuerst – Grundy

+0

Vielen Dank Grundy, gut erklärt – forgottofly

0

Bitte überprüfen Sie die Struktur:

<table style="border : 1px solid"> 
<tr> 
    <td></td> 
    <td ng-repeat="product in allProducts"> 
    {{product.consummable}} 
    </td> 
</tr> 
<tr ng-repeat="test in data"> 

    <td>{{test.resource}}</td> 
    <td ng-repeat="pro in allProducts">{{pro.rom}}</td> 
</tr> 

und schieben item2 nur in allProducts anstatt nur für das verbrauchbare Feld:

angular.forEach($scope.data,function(item, index){ 
angular.forEach(item.products, function(item2, index){ 
    if($scope.allProducts.indexOf(item2.consummable) == -1){ 
    $scope.allProducts.push(item2); // Here I have pushed item2 instead of item2.consummable 
    } 
}) 

})

Plunker: http://plnkr.co/edit/YWPL2EmKK6MIwIkevZ1W?p=preview

+0

Hier sein Drucken aller Werte in der Tabelle.Ich möchte nur den spezifischen Wert unter drucken jeder Überschrift.Beispiel: rom Wert 1 sollte unter 100-Milch dh, (1 * 1) .rom Wert 12345 sollte unter 200-Brot sein – forgottofly

0

Die Lösung für das, was Sie brauchen, ist die folgende:

1) halten die allProducts Generation wie folgt aus:

$scope.allProducts = []; 
    angular.forEach($scope.data,function(item, index){ 
    angular.forEach(item.products, function(item2, index){ 
     if($scope.allProducts.indexOf(item2.consummable) == -1){ 
     $scope.allProducts.push(item2.consummable); 
     } 
    }) 
    }) 

2) hinzufügen dies in Ihrem Controller:

$scope.getColumnValue = function(item,item2, index) { 
    var returnVal; 
    angular.forEach(item.products, function(val, index){ 
    if(item2 == val.consummable){ 
     returnVal = val.rom; 
    } 
    }) 
    return returnVal; 
} 

3) wird die Tabelle Generation sein:

<table style="border:1px solid red;"> 
    <tr> 
    <td> 
    </td> 
    <td ng-repeat="itemProd in allProducts" style="border:1px solid red;"> 
     {{itemProd}} 
    </td> 
    </tr> 
    <tr ng-repeat="item in data"> 
    <td> 
     {{item.resource}} 
    </td> 
    <td ng-repeat="item2 in allProducts" style="border:1px solid red;"> 
     <a>{{getColumnValue(item, item2)}}</a> 
     </td> 
    </tr> 
</table> 
Verwandte Themen