2016-08-31 3 views
0

Ich habe eine Tabelle mit eckigen erstellt. Einige Zeilen in der Tabelle haben untergeordnete Zeilen mit denselben Eigenschaften wie die übergeordneten Elemente. Ich möchte die untergeordneten Zeilen erstellen, wenn der Benutzer auf die übergeordnete Zeile klickt (die übergeordneten Zeilen hätten ein Karottezeichen, das angibt, dass einige untergeordnete Zeilen vorhanden sind). Ich bin wirklich neu in eckigen und ich muss ein Beispiel sehen, so dass ich verstehen kann, wie es in eckigen geschieht. Kann jemand helfen?Wie erstellt man Unterzeilen in angularjs?

hier ist mein html:

<div data-ng-app="myModule"> 
    <div data-ng-controller="myController"> 
     <table> 
      <thead> 
       <tr> 
        <th></th> 
        <th>First Name</th> 
        <th>Last Name</th> 
       </tr> 
      </thead> 
      <tbody> 
       <tr data-ng-repeat="student in students"> 
        <th> 
         <span data-ng-show="{{student.hasChildren}}"> 
          <image data-ng-click="getChildren(student)" data-ng-src="image"></image> 
         </span> 
        </th> 
        <th>{{student.firstName}}</th> 
        <th>{{student.lastName}}</th> 
       </tr> 
       <tr data-ng-repeat="child in children"> 
        <th></th> 
        <th>{{child.firstName}}</th> 
        <th>{{child.lastName}}</th> 
       </tr> 
      </tbody> 
     </table> 
     </div> 
    </div> 

die „hasChildren“ Zelle würde eine Karotte Zeichen haben, die die Kinder Reihen kollabieren und erweitern.

hier ist die js-Datei:

var app = angular 
.module("myModule", []) 
.controller("myController", function ($scope, $http) { 
    $http({ 
     method: 'GET', 
     url: contextPath + '/students' 
    }) 
     .then(function (response) { 
      var students = response.data; 
      $scope.students = students; 
     }); 

    $scope.getChildren = function(student){ 
     var parentStudentId = student.id; 
     $http({ 
      method: 'GET', 
      url: contextPath + '/students/children?studentId=' + parentStudentId 
     }) 
     .then(function (response) { 
      var children = response.data; 
      $scope.children = children; 
     }); 
    } 
}) 
+1

Haben Sie ein Beispiel dafür, wie der HTML-Code aussehen soll und wie eine Datenstruktur aussehen soll? Wir können Ihnen mit dem, was Sie uns gegeben haben, nicht helfen. –

+0

@SterlingArcher Ich habe den Code zu meiner ursprünglichen Frage hinzugefügt. Was ich möchte, ist, die Children-Zeilen mit einem anderen Ajax-Aufruf zu erhalten, wenn der Benutzer auf die Eltern-Zeile klickt. – Nisman

Antwort

0

einen Blick auf diese Probe

Ansatz
<table> 
    <tbody ng-repeat="parent in parents"> 
    <tr> 
     <td> 
     Parent ... 
     </td> 
    </tr> 
    <tr ng-show="SomeCarrotCondition(parent)" ng-repeat="child in parent.children"> 
     <td> 
     Child... 
     </td> 
    </tr> 
    </tbody> 
</table> 

Code:

$scope.getChildren = function(student) { 
    studen.expanded = !student.expanded; // expand/collapse items 
    if (student.children) { // request a server only once to get the children 
     return; 
    } 

    var parentStudentId = student.id; 
    $http({ 
     method: 'GET', 
     url: contextPath + '/students/children?studentId=' + parentStudentId 
    }) 
    .then(function (response) { 
     student.children = response.data; // fill student children collection 
    }); 
} 

HTML Beispiel:

<div data-ng-app="myModule"> 
    <div data-ng-controller="myController"> 
     <table> 
      <thead> 
      <tr> 
       <th></th> 
       <th>First Name</th> 
       <th>Last Name</th> 
      </tr> 
      </thead> 
      <tbody data-ng-repeat="student in students"> 
      <tr> 
       <th> 
        <span data-ng-show="{{student.hasChildren}}"> 
         <image data-ng-click="getChildren(student)" data-ng-src="image"></image> 
        </span> 
       </th> 
       <th>{{student.firstName}}</th> 
       <th>{{student.lastName}}</th> 
      </tr> 
      <tr data-ng-repeat="child in student.children" 
       ng-show="student.expanded"> 
       <th></th> 
       <th>{{child.firstName}}</th> 
       <th>{{child.lastName}}</th> 
      </tr> 
      </tbody> 
     </table> 
    </div> 
</div> 
+0

Ich habe meinen Code zu der Frage hinzugefügt. Aber das Problem ist, wenn ich auf die Elternzeile klicke, fügt es die neue Zeile am Ende der Tabelle hinzu. Ich möchte die untergeordneten Zeilen unter der übergeordneten Zeile einfügen. Weißt du, was die Änderungen sein sollten? – Nisman

+0

@Nisman Ich habe eine Probe –

+0

@Markov Sergey hinzugefügt - danke für die Probe. Ich habe eine andere Frage gestellt, die dieser ähnelt http://stackoverflow.com/questions/39579658/how-to-show-sub-rows-as-a-nested-table-in-angularjs-ng-repeat können Sie Bitte schauen Sie nach und was ist das Problem in meinem Code? – Nisman

Verwandte Themen