I would like to ask you if you can give me a hand on this.
I have created a jsfiddle with my problem here. I need to generate dynamically some inputs with ng-model in a ng-repeater using the way ng-model="my_{{$index}}".
In jsfiddle you can see that everything it's working fine until I try to generate it dynamically.
The html would be:
<div ng-app> <div ng-controller="MainCtrl"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr> <td> <select ng-model="selectedQuery" ng-options="q.name for q in queryList" > <option title="---Select Query---" value="">---Select Query---</option> </select> </td> </tr> <tr ng-repeat="param in parameters"> <td>{{param}}:</td> <td><input type="text" ng-model="field_X" />field_{{$index}}</td> </tr> </table> <div> <div>
And the javascript...
function MainCtrl($scope) { $scope.queryList = [ { name: 'Check Users', fields: [ "Name", "Id"] }, { name: 'Audit Report', fields: [] }, { name: 'Bounce Back Report', fields: [ "Date"] } ]; $scope.$watch('selectedQuery', function (newVal, oldVal) { $scope.parameters = $scope.selectedQuery.fields; }); }
Can you give me any idea?
Thanks a lot.
Note: The $index variable is used to get the Index of the Row created by ng-repeat directive. Each row of the HTML Table consists of a Button which has been assigned ng-click directive. The $index variable is passed as parameter to the GetRowIndex function.
ng-options is the directive which is designed specifically to populate the items of a dropdown list. One major advantage using ng-options for the dropdown is, it allows us to pass the selected value to be an object. Whereas, using ng-repeat the selected value can only be string.
The ngModel directive is a directive that is used to bind the values of the HTML controls (input, select, and textarea) or any custom form controls, and stores the required user value in a variable and we can use that variable whenever we require that value. It also is used during form validations.
The *ngFor directive in Angular is similar to the ng-repeat directive in AngularJS. It repeats the associated DOM element for each item in the specified collection.
Does it solve your problem?
function MainCtrl($scope) { $scope.queryList = [ { name: 'Check Users', fields: [ "Name", "Id"] }, { name: 'Audit Report', fields: [] }, { name: 'Bounce Back Report', fields: [ "Date"] } ]; $scope.models = {}; $scope.$watch('selectedQuery', function (newVal, oldVal) { if ($scope.selectedQuery) { $scope.parameters = $scope.selectedQuery.fields; } }); }
And in your controller:
<tr ng-repeat="param in parameters"> <td>{{param}}:</td> <td><input type="text" ng-model="models[param] " />field_{{$index}}</td> </tr>
Fiddle
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With