with usar llenar dinamico con como angularjs

angularjs - usar - ng-options selected



AngularJS-Usando $ index en ng-options (5)

Si vinculo una matriz a una etiqueta SELECT usando lo siguiente:

<select ng-model="selData" ng-options="$index as d.name for d in data">

Las etiquetas OPCIÓN obtienen los valores de índice incrementales esperados (0, 1, 2, ...). Sin embargo, cuando selecciono algo del menú desplegable, el valor de selData está selData a undefined . ¿Debería funcionar realmente el enlace?

Por otro lado, si hago lo siguiente:

<select ng-model="selData" ng-options="d as d.name for d in data">

Las etiquetas de OPCIÓN obtienen el mismo índice, pero todo el objeto está vinculado en el cambio. No sé si Angular tiene la intención de admitir esto, o si es simplemente un buen efecto secundario / error.


$ index se define para ng-repeat, no select. Creo que esto explica lo undefined . (Entonces, no, esto no debería funcionar.)

Soportes angulares de encuadernación en todo el objeto. La documentación podría redactarse mejor para indicar esto, pero lo insinúa: "ngOptions ... debe usarse en lugar de ngRepeat cuando desee que el modelo seleccionado esté vinculado a un valor que no sea de cadena".


Dado que las matrices son muy similares a los objetos en JavaScript, puede utilizar la sintaxis para "orígenes de datos de objetos". El truco está en los paréntesis en la parte ng-options :

var choices = [ ''One'', ''Two'', ''Three'' ];

En la plantilla:

<select ng-model="model.choice" ng-options="idx as choice for (idx, choice) in choices"> </select>

Al final, model.choice tendrá el valor 0, 1 o 2. Cuando sea 0, verá ''One''; 1 mostrará ''Dos'', etc. Pero en el modelo, solo verá el valor del índice.

Adapté esta información de "Mastering Web Application Development with AngularJS" de PACKT Publishing y la verifiqué en la documentación de referencia de Angular para seleccionar .


No use $index dentro de las etiquetas seleccionadas. Use $index dentro de las etiquetas de opción si desea usar los índices de matriz como valores u opciones.

<option ng-repeat="user in users" value="{{user.username}}">{{$index+1}}</option>

Si desea usar valores internos, simplemente póngalos en el atributo de valor como expresión de enlace como

<option ng-repeat="user in users" value="{{$index+1}}">{{user.username}}</option>

y mi código de controlador será como:

var users = [''username'':''bairavan'', ''username'':''testuser''];


También puede usar ng-value = ''$ index'' en la etiqueta <option> .

<select ng-model="selData"> <option ng-repeat="d in data track by $index" ng-value="$index"> {{d.name}} </option> </select>


Ya que no puedes usar $index pero puedes probar indexOf .

HTML

<div ng-app ng-controller="MyCtrl"> <select ng-model="selectedItem" ng-options="values.indexOf(selectedItem) as selectedItem for selectedItem in values"></select> selectedItem: {{selectedItem}} </div>

Controlador

function MyCtrl($scope) { $scope.values = ["Value1","Value2"]; $scope.selectedItem = 0; }

Demo Fiddle

Comentario:

Array.prototype.indexOf no es compatible con IE7 (8)