Ich habe eine ng-Wiederholung, die ein Array von ausgewählten Elementen erstellt. (Die Selects erlauben die Konfiguration von Spalten in einer Datentabelle: 'Name', 'Adresse', 'Telefon' usw.)Deaktivieren von Optionen in Array von Auswahl mit Winkel
Keine zwei Spalten können die gleichen Daten verwenden.
Wenn also 'Name' für die erste Spalte ausgewählt ist, ist der Name in den Auswahlfeldern aller anderen Spalten deaktiviert. so:
col1 options col2 options col3 options etc.
-name -name -name
-address -address -address
-phone -phone -phone
wird
col1 col2 options col3 options etc.
-name SELECTED -name DISABLED -name DISABLED
-address -address
-phone -phone
Sie bekommen die Idee.
Dies ist, wo ich so weit bin. Ich habe versucht, einen Test einzigartig genannt einrichten, die true zurückgeben würde, wenn die Option nicht irgendwo anders gewählt wurde, aber ich habe nicht weit:
<div ng-repeat="column in m.data.Columns track by $index">
<label for="ColumnTypeCode{{ $index }}" class="control-label">Column #{{ $index + 1 }} Code</label>
<select
id="ColumnTypeCode{{ $index }}"
class="form-control"
ng-style="{'width': '100%'}"
name="ColumnTypeCode{{ $index }}"
ng-model="column.ColumnCode"
required data-ng-change="SetColumnDefaults(column)"
ng-options="x.ColumnCode as x.ColumnCode disable when !x.ColumnCode.unique for x in m.data.IncidentTypeColumns | filter:{ ShowOnClaimsGrid: true } "
unique_item_name="ColumnCode"
ng-disabled="column.Mandatory"></select>
</div>
Gibt es eine Möglichkeit, dass die Winkel 2-Wege sagen Bindung kann Wenn eine bestimmte Auswahl in einem Modell enthalten ist, und diese Option in allen anderen Auswahlbereichen deaktivieren?
Gerade sptiballin' hier:
ich deaktivieren setzen könnte, wenn x.ColumnCode.takenAlready und dann takenAlready auf true gesetzt. Ich denke, ich brauche eine Funktion, um das zu tun.
ng-change="setOptionTaken(x)";
$scope setOptionTaken = function(column) {
column.takenAlready = column.ColumnCode.length;
}
}
Hm. Nein. Ich brauche ein Array von TakeAlready-Typen, die ich durchlaufen kann.
Ja, ich könnte alles durch Funktionen machen, ich denke nur, dass Angular cleverer ist als das mit seiner Zwei-Wege-Bindung. – DaveC426913