Winkel-Richtlinie bewertet Nicht Innerhalb von ng-repeat
Habe ich Folgendes setup:
App/Richtlinie
var app = angular.module("MyApp", []);
app.directive("adminRosterItem", function () {
return {
restrict: "E",
scope: {
displayText: "@"
},
template: "<td>{{ displayText }}</td>", //should I have this?
link: function(scope, element, attrs){
//What do I put here? I don't seem to have any
//element to initialize (set up event handlers, for example)
},
compile: function(?,?,?){} //should I have this? If so, what goes inside?
}
});
Controller
function PositionsController($scope) {
$scope.positions = [{ Name: "Quarterback", Code: "QB" },
{ Name: "Wide Receiver", Code: "WR" }
];
}
HTML:
<div ng-app="MyApp">
<div ng-controller="PositionsController">
<table>
<tr ng-repeat="position in positions">
<admin-roster-item displayText="{{ position.Name + ' (' + position.Code + ')' }}"></admin-roster-item>
</tr>
</table>
</div>
</div>
Es ist ein sehr einfaches Beispiel, aber ich kann es nicht mehr zu machen. Vielleicht gibt es etwas, dass tutorials nicht mir zu sagen, oder, die geheimen Winkel wissen?
Wenn ich entfernen Sie die Richtlinie innerhalb der <tr ng-repeat="..." />
und Ort <td>{{ displayText }}</td>
statt, es werden alle Datensätze anzeigen.
Aber ich will, dass die Richtlinie komplizierter als nur eine einzige <td>{{}}</td>
(irgendwann), so dass ich Sie wiederverwenden konnte dieser Richtlinie in mehreren apps.
So, ich bin wirklich Fragen, wie wir richtig erstellen Sie eine Richtlinie, die nach innen ng-repeat? Was bin ich? Was sollten abgenommen werden, aus dem obigen code?
InformationsquelleAutor Mickael Caruso | 2013-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Damit einverstanden, dass Sie brauchen, um darüber nachzudenken, wo die Richtlinie beginnt und endet. Hier ist ein plnkr, veranschaulicht eine Richtlinie gebunden, um jedes Element im array - http://plnkr.co/edit/IU8fANreYP7NYrs4swTW?p=preview
Wenn Sie möchten, dass die Richtlinie zum einkapseln der Aufzählung einer Sammlung definiert, die von einem übergeordneten Bereich wird es ein wenig tricker. Ich bin mir nicht sicher, ob die folgenden "best practice", aber es ist, wie ich behandelt es -- http://plnkr.co/edit/IU8fANreYP7NYrs4swTW?p=preview
Wenn man sich auf die Richtlinie zur Durchführung der iteration du mit transklusion, das ist eine erfundene Wort bedeutet, dass (wie ich es verstehe) nehmen Sie die Inhalte definiert, die in der übergeordneten, schieben Sie es in die Richtlinie aufgenommen, und dann bewerten Sie es. Ich arbeite mit dem Winkel für ein paar Monate, und ich fange an zu denken, dass Fragen, die Richtlinie zu Durchlaufen ist ein Geruch, und ich war schon immer in der Lage zu entwerfen um ihn herum.
Ich meine, dass es wichtig ist zu denken, die Richtlinie in Bezug auf das, was Wert ist, sofern der der Ansicht ist, es zu verwenden. Ich finde, die Richtlinien sind am einfachsten zu verwalten, wenn Sie klein sind, dicht gekapselt Brocken ui + Verhalten. Wenn ich verliere Website der core-Funktionalität, die in der Richtlinie liefern soll (und starten Sie es beginnt zu viele Aufgaben) die Komplexität beginnt, Sie zu überwältigen.
"Transklusion" ist nicht ein aus word: en.wikipedia.org/wiki/Transclusion 🙂
ich stehe korrigiert
Ich stehe vor dem gleichen Problem, meine Richtlinie arbeitet schön mit divs aber nicht dazu, sobald ich eine Tabelle Struktur. Ich denke nicht, dass diese Antwort als Lösung. Ich möchte eine Tabelle.
InformationsquelleAutor Jason
Ignorieren alle die theoretischen Aspekte, können Sie Ihr code funktioniert, indem zwei einfache änderungen.
displaytext
nichtdisplayText
<td>
tags außerhalb der Richtlinie in der VorlageTun, und es wird funktionieren; denke, das sind die beiden Winkel bugs.
Sugestion 2 löst. Sugestion 1 ist überflüssig (verwenden camelCase auf javascript, hyphened-tags in HTML).
InformationsquelleAutor Malvolio
ich denke, die richtige Herangehensweise wäre, zu senden das Objekt in den admin-roster-item, wie dieses:
und in der Richtlinie:
PS. von mir nicht getestet!
InformationsquelleAutor user1695032
Statt zu schreiben Ihre Richtlinie als Kind von ng-repeat, versuchen Sie halten Sie die benutzerdefinierte Richtlinie auf der gleichen Ebene wie ng-repeat, diese
Und darüber hinaus erlauben Sie Ihrem benutzerdefinierten Richtlinie werden als Attribut verwendet. AngulaJS definiert ng-Wiederholungen Priorität als 1000, also zu Zeiten, wenn Sie benutzerdefinierte Richtlinie gemacht wird, wird es nicht gehen, auch mit ng-repeat.
Eine zweite option (versuchen Sie nur dann, wenn der erste ausfällt) ist die Priorität der benutzerdefinierten Richtlinie mehr als der ngRepeat also zum 1001.
InformationsquelleAutor Manish M Demblani
Ich hatte das ähnliche Problem, wobei die ng-repeat in meinem view wass nicht ausgewertet, wenn der view enthaltenen Richtlinie ('mydirective')
Meine Richtlinie definition wurde
und meine view-controller-definition war
Hinweis Sie können beide Controller sind refered by 'vm', indem Sie 'controllerAs' parameter. Dies ist der Grund für das problem. Wenn die Richtlinie in der Ansicht, Winkel bezieht sich immer das 'vm' (definiert in der Richtlinie controller eher als Ansicht.
Wenn ich verschiedene Bezeichnungen für die controller Referenzen, problem verschwunden
Nun, Meine Richtlinie definition ist
und meine view-controller-definition war
Hoffe, es hilft.
InformationsquelleAutor Chandru
Hatte genau das gleiche problem.
Hatte eine benutzerdefinierte Richtlinie, die in eine ng-repeat, Tisch->tr->td>Richtlinie, und beim Sortieren der Tabelle mit ng-repeat " und "Array".die Sortierung der Tabelle ändern, um aber die Richtlinien nicht erneut Rendern. Das problem war, dass ich mit
entfernt, die Strecke, die durch den index aus dem ng-repeat und es wurde behoben.
InformationsquelleAutor Tomas Katz