我想在bootstrap模式中实现一个表,用于在angularJS中添加/删除dinamically行。这里的例子是img:
很快,我想在最后一个按钮上添加很多行,但是删除另一个按钮。如何做角?现在我这样做:
HTML
<table>
<tbody>
<tr ng-repeat="row in rows">
<td ng-bind-html="row.SocietyBorrower" angular-compile="nRows"> </td>
<td><label class="fs-label">{{fsFactory.getLabel(labels, pageName, 'Form_Label_NDGSocieta')}}</label></td>
<td>   </td>
<td ng-bind-html="row.NDGSociety" angular-compile="nRows"></td>
<td ng-show="row.LastRow">
<a href="#" ng-click="addNewRow()" class="fs-form-plus-minus"><span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span></a>
</td>
<td ng-hide="row.LastRow">
<a href="#" ng-click="deleteRow($index)" class="fs-form-plus-minus"><span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span></a>
</td>
</tr>
<tr><td></td></tr>
</tbody>
AngularJS
$scope.rows = [{
"SocietyBorrower": $sce.trustAsHtml("<input type=\"text\" ng-class=\"{'fs-form-invalid' : fsFactory.checkHasError(errors, 'SocietyBorrower')}\" name=\"SocietyBorrower\" class=\"fs-form-table-society\" ng-model=\"subItem.SocietyBorrower\" ng-model-options=\"defaultNgOptions\" />"),
"NDGSociety": $sce.trustAsHtml("<input type=\"text\" ng-class=\"{'fs-form-invalid' : fsFactory.checkHasError(errors, 'NDGSociety')}\" name=\"NDGSociety\" class=\"fs-form-table-ndg\" ng-model=\"subItem.NDGSociety\" ng-model-options=\"defaultNgOptions\" />"),
"LastRow": false
}];
$scope.nRows = $scope.rows.length;
$scope.addNewRow = function () {
$scope.rows.push({
"SocietyBorrower": $sce.trustAsHtml("<input type=\"text\" ng-class=\"{'fs-form-invalid' : fsFactory.checkHasError(errors, 'SocietyBorrower')}\" name=\"SocietyBorrower\" class=\"fs-form-table-society\" ng-model=\"subItem.SocietyBorrower\" ng-model-options=\"defaultNgOptions\" />"),
"NDGSociety": $sce.trustAsHtml("<input type=\"text\" ng-class=\"{'fs-form-invalid' : fsFactory.checkHasError(errors, 'NDGSociety')}\" name=\"NDGSociety\" class=\"fs-form-table-ndg\" ng-model=\"subItem.NDGSociety\" ng-model-options=\"defaultNgOptions\" />"),
"LastRow": true
});
$scope.nRows++;
};
$scope.deleteRow = function (index) {
if ($scope.nRows < 1) {
$scope.rows.splice(index, 1);
$scope.rows.push({
"SocietyBorrower": $sce.trustAsHtml("<input type=\"text\" ng-class=\"{'fs-form-invalid' : fsFactory.checkHasError(errors, 'SocietyBorrower')}\" name=\"SocietyBorrower\" class=\"fs-form-table-society\" ng-model=\"subItem.SocietyBorrower\" ng-model-options=\"defaultNgOptions\" />"),
"NDGSociety": $sce.trustAsHtml("<input type=\"text\" ng-class=\"{'fs-form-invalid' : fsFactory.checkHasError(errors, 'NDGSociety')}\" name=\"NDGSociety\" class=\"fs-form-table-ndg\" ng-model=\"subItem.NDGSociety\" ng-model-options=\"defaultNgOptions\" />")
});
} else {
$scope.rows.splice(index, 1);
$scope.nRows = $scope.rows.length;
}
};
有什么建议吗?我试着用ng-hide / ng-显示最后一行的添加/删除按钮。正确?显然,在开始时,第一行必须为空,并且只有添加按钮。 怎么做?非常感谢!
答案 0 :(得分:1)
根据我在jsfiddle为您创建简单演示的理解,请找到并告诉我您需要的任何其他内容。
http://jsfiddle.net/Lvc0u55v/12390/
还附上代码。
var myApp = angular.module("myApp", []);
myApp.controller('myCtrl', function ($scope) {
$scope.rows = [{"Name" : "Chandra Prakash Variyani"}];
$scope.addRow = function () {
var obj = { "Name": $scope.Name };
$scope.rows.push(obj)
}
$scope.deleteRow = function (index) {
$scope.rows.splice(index, 1);
}
});
HTML
<div class="info-box" id="lkj" ng-app="myApp" ng-controller="myCtrl">
<div class="row">
<div class="col-lg-2"><input type="text" ng-model="Name" /></div>
<div class="col-lg-2"><input type="button" value="Add" ng-click="addRow()" /></div>
</div>
<br />
<hr />
<table>
<tbody>
<tr ng-repeat="row in rows">
<td ng-bind="$index+1"> </td>
<td ng-bind="row.Name"> </td>
<td> <input type="button" value="delete" ng-click="deleteRow(row.Name)" /> </td>
</tr>
<tr></tr>
</tbody>
</table>
答案 1 :(得分:0)
我要做的是从0开始制作一个计数器。
每次用户点击按钮时,都会向该计数器添加1。
鉴于他点击了10次,你应该有11行显示给他。
然后,您可以使用ng-repeat
为一行编写一堆代码 。
然后重复10次,得到11行。
如果他点击删除按钮,您可以将1减去计数器,或者您可以使用数组来获取索引,并删除单击的行。
足够清楚了吗?或者我应该改写?
答案 2 :(得分:0)
您的主要问题是您在ng-repeat内部进行了所有检查和努力工作。
如果有必要操作ng-repeat的东西,我总是把它放在外面,例如,当你只剩下一行时,你会显示ADD按钮,这是有点倒退。
我在主ng-repeat tr之前或之后再创建一行,然后添加ng-if="!rows.length"
。这样,只有在删除了所有行时才会显示此行。