The view:
<html>
<head>
<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="https://code.angularjs.org/1.2.16/angular.js"></script>
<script src="script.js"></script>
</head>
<body ng-app="myApp">
<div ng-controller="MyCtrl as vm">
<table>
<thead>
<tr>
<th>Name</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="row in vm.rows">
<td>
<input type="text" ng-model="row.name" ng-readonly="row.readonly" ng-disabled="row.readonly" on-focus="!row.readonly" />
</td>
<td>
<input type="text" ng-model="row.value" ng-readonly="row.readonly" ng-disabled="row.readonly" />
</td>
<td>
<button ng-click="vm.editRow($index)">{{row.readonly ? "Edit" : "Save" }}</button>
<button ng-click="vm.removeRow($index)">Remove</button>
</td>
</tr>
</tbody>
</table>
<br />
<input type="button" value="Add New" ng-click="vm.addNewRow('','')" />
</div>
</body>
</html>
The script:
angular.module('myApp', [])
.controller('MyCtrl', function () {
var vm = this;
vm.rows = [{"name": "aaa", "value" : 50, "readonly": true}, {"name": "bbb", "value" : 70, "readonly": true}];
vm.addNewRow = function(name, value) {
vm.rows[vm.rows.length - 1].readonly= true;
vm.rows.push({"name":"", "value":"", "readonly": false})
}
vm.removeRow = function(index) {
vm.rows.splice(index, 1);
}
vm.editRow = function(index) {
vm.rows[index].readonly = !vm.rows[index].readonly;
}
})
.directive('onFocus', function($timeout) {
return function(scope, element, attrs) {
scope.$watch(attrs.onFocus, function (newValue) {
if (newValue) {
$timeout(function () {
element.focus();
}, 0, false);
}
});
};
});
See the example in action on Plunker.

No comments:
Post a Comment