2016-05-18 3 views
0

Ich habe derzeit eine Tabelle mit ng-Wiederholung in Angular. Der Zellenwert wird durch eine Variable im Bereich festgelegt.Wie fügt man Links in allen Zellen einer Tabelle in Angular hinzu?

<tbody> 
    <tr ng-repeat="item in items" myDirective> 
    <td>{{item.title}}</td> 
    <td>{{item.field}}</td> 
    </tr> 
</tbody> 

Was würde ich tun möchte, ist dies am Ende haben:

<tbody> 
    <tr ng-repeat="item in items" myDirective> 
    <td><a href="{{item.link}}">{{item.title}}</a></td> 
    <td><a href="{{item.link}}">{{item.field}}</a></td> 
    </tr> 
</tbody> 

So habe ich eine Richtlinie, um das zu tun, aber ich gehe nicht überall mit ihm. Ich habe versucht, jedes Kind des tr-Elements zu erhalten, umschließe dann das HTML der (td) -Kinder mit einem Tag, aber es scheint, dass die Bindung das Tag entfernt und durch den Vanilla-Elementtitel und -Feld ersetzt.

Hier ist mein Code so weit, der das a-Tag mit einer Statuswebsite auf dem ersten td-Tag (Titel) setzt, aber es kann nicht funktionieren.

angular.module('myApp') 
    .directive('myDirective', function() { 
    return { 
     restrict: 'A', 
     link: function postLink(scope, element, attrs) { 
     var cellules = element.children(); // get td elements 
     angular.element(cellules[0]).html($compile('<a href="http://website">' + angular.element(cellules[0]).html() + '</a>')(scope)); // surround title with a link 
     } 
    }; 
    }); 

Vielen Dank!

+0

Dies ist wahrscheinlich die Frage nicht vollständig beantworten, aber Sie sollten Ihre Richtlinie mit umsetzen "-" Notation nicht ... 'Camelcase < tr ng-repeat = "Element in Items" my-directive> ' – sourdoughdetzel

+0

Woher sollen wir wissen, was' cellules [0] 'ist? Stellen Sie [mcve] bereit. Auch nur zu sagen, dass es nicht funktioniert, ist nicht viel von einem Problem Beschreibung – charlietfl

+0

@sourdoughdetzel ja du hast Recht und es ist eigentlich so in meinem Code, aber ich machte einen Fehler bei der Änderung der Namen für das Beispiel :) – clems4ever

Antwort

1

Richtlinie

.directive('myDirective', function() { 
    return { 
     restrict: 'A', 
     scope:{ 
      link:'=link', 
      title:'=title' 
     }, 
     template:'<a href={{link}}>{{title}}</a>' 
    }; 
}); 

HTML,

<table> 
    <tr ng-repeat='item in items'> 
    <td my-directive link='item.link' title='item.title'></td> 
    <td my-directive link='item.link' title='item.field'></td> 
    </tr> 
</table> 
+0

Vielen Dank für Ihre Antwort. Das war meine ursprüngliche Idee, aber ich möchte den gleichen Link ('...') für alle Zellen erstellen und nicht den ersten. Mit dieser Technik sollte ich eine Direktive für jedes Feld in der Tabelle erstellen, was nicht sehr praktisch ist. – clems4ever

+0

Bitte überprüfen Sie meine aktualisierte Antwort. – user1111

+0

Danke. Was ich suchte, war ein "kürzerer" Weg, es zu tun, indem ich nur den Link und die Direktive im tr-Tag hinzufügte (da ich in jeder Zeile 5-6 td-Tags habe und möglicherweise in Zukunft mehr), aber zumindest das ist eine funktionierende Lösung. Danke nochmal ! – clems4ever

Verwandte Themen