übergeben von Daten an eine Richtlinie für die ng-repeat innerhalb der Richtlinie
Ich halten, stoßen meinen Kopf auf eckig, wenn ich will eine Richtlinie, die eine Liste von Aktionen angezeigt, aber ich will es allgemein genug, um auf mehr als eine Art/Form des Objekts. Für das einfache Beispiel, lässt sagen, ich habe
<select ng-options="person.id by person in people" ng-model="selectPerson">
<option>
{{person.name}}
</option>
</select>
(Beachten Sie, dass dies ist ein einfaches Beispiel, und etwas, was diese einfache würde wahrscheinlich, profitieren nicht von einer Richtlinie)
Nun will ich es in eine generische Richtlinie genannt cool-wählen Sie
Ich könnte versuchen, so etwas wie dies in meinem js
//directive coolselect.directive.js
angular.module('mycoolmodule',[]).directive('coolSelect',function(){
return {
restrict:'E',
templateUrl:'js/coolselectdirective/_coolselect.html',//html from example above
scope:{
items:'=',
displayProperty:'@',
idProperty:'@',
selectedItem:'='
},
link:function(scope,element){
//do cool stuff in here
}
}
});
Aber dann hier, wo ich beginnen zu werfen, ein wenig in meinem Mund
//html template _coolselect.html
<select ng-model="selectedItem" ng-options="item[scope.idProperty] by item in items">
<option>
{{item[scope.displayProperty]}}
</option>
</select>
Um ehrlich zu sein ich bin nicht einmal sicher, ob das funktionieren würde in eckig. Ich habe gesehen, was für ein ui-wählen Sie mit einem äußeren Gültigkeitsbereich. Vielleicht ist der Weg zu gehen?
https://github.com/angular-ui/ui-select/blob/master/dist/select.js#L892
Aber dann denke ich, würde ich brauchen, um mit Phantasie transclude, wie ui-wählen Sie ist.
Gibt es nicht einen einfacheren Weg? Bin ich versucht zu machen, die Richtlinien zu allgemein? Ist dies nicht ein problem anderer Leute in?
BEARBEITEN:
Am Ende wäre es ideal für Sie, um so auszusehen.
<cool-select repeat="person.id by person in people" display-property="name"></cool-select>
- Sie sollten die Richtlinie als element und verwenden Sie es als eine Klasse? Wenn Sie die restrict-E an C, Sie können es als eine Klasse.
- Sorry der Klasse, ist nur zu zeigen, dass es eigene Stile, die diesem element zugeordnet.
- Ich nahm die Klasse zu machen, mehr klar
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bitte siehe demo unter gewusst wie: übergeben Sie jedes Objekt von array-Richtlinie in ng-repeater
JS:
HTML:
Es gibt ein paar Dinge hier zu beachten:
ng-repeat
auf dieselect
Sie wiederholen dieselect
.select
- element ein spezielles Attribut für die Wiederholung Optionen genanntng-options
.scope
in der Vorlage, sondern nur seine Eigenschaften. In einem AngularJS Vorlagescope
impliziert, in der Tat, dass ist das Ziel vonscope
, die "scope", dass Sie den Zugriff auf Eigenschaften innerhalb.coolSelect
Richtlinie, da haben Sie eingeschränkt auf die Verwendung als element aber Sie versuchen, es zu benutzen als ein Klasse.item[displayProperty]
um es generic.Warum Sie brauchen, um zu bauen, die Optionen selbst mit displayProperty in Optionen-tag-ng-Optionen können mehr tun,
Wert.id ist der Wert gespeichert, in der ngModel meineoption
Wert.label ist der angezeigte label
dafür, dass nichts ausgewählt-option, wenn nötig