2017-05-18 7 views
0

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.

Antwort

0

Ein Ansatz könnte sein, einen ng-click Listener auf dem Element <select> hinzuzufügen, das an eine Funktion im Controller bindet, mit der Sie den ausgewählten Wert für die Spalten-ID überprüfen können. Mit diesem Wissen (dh wenn Sie wissen, welches Label ausgewählt ist und welche Spalte es ist), können Sie die Option in den anderen beiden Selektionen manuell deaktivieren.

Erklären es, es fühlt sich etwas klobig an, aber es würde in einer Prise funktionieren, denke ich.

+0

Ja, ich könnte alles durch Funktionen machen, ich denke nur, dass Angular cleverer ist als das mit seiner Zwei-Wege-Bindung. – DaveC426913

Verwandte Themen