Problemet är att dina dynamiskt tillagda inmatningsfält inte har en klickhändelse när du lägger till dem med jQuery. Lägger till ng-click
är inte tillräckligt. Du måste använda $compile
för att låta angular analysera detta element.
Det mycket smartare sättet är dock att inte använda jQuery alls och låta fälten genereras av angular själv med ng-repeat
.
angular
.module('app', [])
.controller('dynamicFieldsController', dynamicFieldsController);
dynamicFieldsController.$inject = ['$scope'];
function dynamicFieldsController($scope){
var vm = this;
vm.numOfFields = 0;
vm.fields = [];
vm.add = function() {
for (var i = 0; i < vm.numOfFields; i++) {
var index = vm.fields.length;
vm.fields.push(index);
}
}
}
input{
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app='app' ng-controller='dynamicFieldsController as vm'>
<input placeholder='num of fields' ng-model='vm.numOfFields'>
<button ng-click='vm.add()'>add</button>
<input type='text' ng-repeat='field in vm.fields' value='{{ field }}'>
</div>
I det här exemplet kan du lägga till valfritt antal element och binda ng-click
händelser för dem. De kommer att fungera utanför lådan, sedan analyseras med vinkel. Dina addValues
funktion måste nu helt enkelt använda vm.fields
för att faktiskt lägga till värdena till databasen.