2016-02-09 15 views
7

Sto tentando di impostare il valore predefinito delle opzioni Sto usando select e ng-repeat. Ricevo i dati nel file js e io chiamo il modello per impostare il valore lì.ng-selected non funziona con ng-repeat per impostare il valore predefinito

Si prega di dare un'occhiata per codice qui sotto: il file

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Example - example-ngrepeat-select-production</title> 


    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.0-rc.2/angular.min.js"></script> 
    <script src="app.js"></script> 



</head> 
<body ng-app="ngrepeatSelect"> 
    <div ng-controller="ExampleController"> 
    <form name="myForm"> 
    <label for="repeatSelect"> Repeat select: </label> 
    <select ng-model="datamodel"> 
     <option ng-repeat="dataitem in data" 
       ng-selected ="{{dataitem == datamodel}}">{{dataitem}}</option> 
    </select> 
    </form> 
    <hr> 
    <tt>repeatSelect = {{datamodel}}</tt><br/> 
</div> 
</body> 
</html> 

app.js

(function(angular) { 
    'use strict'; 
angular.module('ngrepeatSelect', []) 
    .controller('ExampleController', ['$scope', function($scope) { 
    $scope.data = [1,2,3,4,5]; 

    $scope.datamodel = 2; 
}]); 
})(window.angular); 

Ecco il mio plunker

risposta

9

Dal angular docs:

Si noti cheil valore di una direttiva select utilizzata senza ngOptions è sempre una stringa. Quando il modello deve essere associato a un valore non stringa , è necessario convertirlo esplicitamente utilizzando una direttiva (vedere l'esempio di seguito) o utilizzare ngOptions per specificare l'insieme di opzioni. Questo è perché un elemento opzione può essere associato solo ai valori stringa a presente.

Quindi il cambio a $scope.datamodel = '2'; funziona. Vedi aggiornato plunker.

Tuttavia, è preferibile utilizzare ngOptions. Ancora una volta, dai documenti:

In molti casi, ngRepeat può essere utilizzato su <option> elementi anziché ngOptions per ottenere un risultato simile. Tuttavia, ngOptions fornisce alcuni vantaggi, come una maggiore flessibilità nel modo in cui il modello dello è assegnato tramite la selezione come parte dell'espressione di comprensione, e in aggiunta alla riduzione della memoria e all'aumento della velocità non creando un nuovo ambito per ogni istanza ripetuta.

Quindi, per mantenere il modello di come un intero, è possibile invece utilizzare:

<select ng-model="datamodel" ng-options="dataitem for dataitem in data"> 
    <option value="">Please Select</option> 
</select> 

Vedi plunker

+0

Funziona! Eccezionale ! Devo solo convertire intero in stringa e tutto pronto. – FShah

+0

Sto provando a impostare il numero massimo come valore predefinito ma non dal file .js, quindi sto usando ng-repeat. ecco Link: (http://plnkr.co/edit/zJbQTVPaErP2dKe5gUXv?p=preview) – FShah

+0

@FShah, pensi di poter ancora usare 'ng-options', puoi spingere il tuo plunker per mostrare cosa intendi? È possibile utilizzare 'ng-init' per impostare il valore del modello sull'ultimo elemento nell'elenco se l'elenco è ordinato da min a max – user2718281