2016-07-01 11 views
11

Sto compilando i menu a discesa in un forloop e desidero impostare il valore predefinito per ogni menu a discesa in base a un'espressione. Questo sembra funzionare, ma il mio problema è quando imposto il valore predefinito tramite ng-selected, inoltre, si attiva l'evento change che non è l'ideale.Angolare: menu a discesa, impedisce ng-selezionato di attivare ng-change

Vorrei che l'evento di modifica venga attivato solo se il menu a discesa viene effettivamente modificato.

<div layout="row" ng-if="layer.Styles && layer.Styles.length > 1"> 
    <md-input-container class="md-icon-float md-block layer-style"> 
     <md-select ng-change="vm.changeLayerStyle(layer,selectedStyle)" ng-model="selectedStyle" ng-model-options="{trackBy: '$value.Name'}" aria-label="Change Layer Style"> 
      <md-option ng-repeat="style in layer.Styles" ng-value="style" ng-selected="style.IsDefault == true"> 
       {{style.DisplayName}} 
      </md-option> 
     </md-select> 
    </md-input-container> 
</div> 

Utilizzando materiale angolare per la discesa

+1

Provare a utilizzare ngModel per impostare il valore –

risposta

4

ripetere più elementi opzionali hanno una storia di dare problemi della gente. Normalmente ti direi di usare invece ng-options sulla selezione, ma dal momento che hai specificamente bisogno di usare alcuni componenti materiali, questa non è un'opzione.

So che non è la soluzione più carina, ma è possibile risolvere il problema mantenendo una copia dell'ultimo valore e confrontandola con quella corrente, una volta che l'evento di modifica è stato attivato. Se quel valore non è cambiato, quindi ignora l'evento. Questo potrebbe richiedere qualche ritocco extra poiché l'impostazione dello layer.Styles probabilmente attiverà molti aggiornamenti.

Dato che non ci hai dato un plunker con cui giocare, posso solo suggerirti di giocare con ng-model-options (che stai già usando per controllare track-by) la proprietà updateOn e impostarla su qualcosa che non essere attivato dall'impostazione della proprietà selezionata. Mi viene in mente il valore blur.

+0

Sì, ho optato per la prima opzione, nella funzione che viene chiamata in ng-change, faccio qualcosa di simile se (serviceLayer.Style === style.Name) restituisce; e questo mi dà quello che voglio. Sarei stato bello controllarlo nel ripetitore, ma vabbè – StevieB

Problemi correlati