在angularjs中删除ng-grid中的一行,也会删除下一行的文件
Deleting a row in ng-grid in angularjs, it also deletes the file in the next row
var app = angular.module('myApp',['ngGrid']);
app.controller('merchantController',function($scope, $timeout) {
$scope.people = [
{"name":"sd","place":"hyd"},
{"name":"sd","place":"hyd"},
{"name":"sd","place":"hyd"}
];
$scope.gridOptions = {
data:'people',
columnDefs:[
{field:'name', cellTemplate:'<input type="text" ng-model="row.entity.name"/>'},
{field:'place',cellTemplate:'<input type="text" ng-model="row.entity.place"/>'},
{displayName:'Browse',cellTemplate:'<input type="file" name="img{{row.rowIndex}}" ng-model="row.entity.filename"/>'},
{displayName:"Remove",cellTemplate:'<button ng-click="remove(row.rowIndex)">Remove</button>'}
]
};
$scope.remove = function(ind) {
var index = this.row.rowIndex;
$scope.gridOptions.selectItem(index, false);
var form=document.forms.namedItem("gridform");
form.elements["img"+index].value="";
$scope.people.splice(index,1);
};
});
<!DOCTYPE html>
<html ng-app="myApp" lang="en-US">
<head>
<link data-require="ng-grid@2.0.14" data-semver="2.0.14" rel="stylesheet" href="https://cdn.rawgit.com/angular-ui/ng-grid/v2.0.14/ng-grid.css" />
<script data-require="jquery@2.0.3" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.7/angular.js" data-semver="1.3.7" data-require="angular.js@*"></script>
<script data-require="ng-grid@2.0.14" data-semver="2.0.14" src="https://cdn.rawgit.com/angular-ui/ng-grid/v2.0.14/build/ng-grid.js"> </script>
<script data-require="ng-grid@2.0.14" data-semver="2.0.14" src="https://cdn.rawgit.com/angular-ui/ng-grid/v2.0.14/plugins/ng-grid-flexible-height.js"></script>
</head>
<body ng-controller="merchantController">
<form name="gridform">
<div class="gridStyle" ng-grid="gridOptions"></div>
</form>
</body>
</html>
我想删除相应的行,当删除按钮是clicked.The行正在被删除,但下一行的文件也被删除。
您的代码一切正常,但这是浏览器的问题,因为浏览器不会更改 input[type="file"]
的正确 files
属性。您必须声明指令以监视文件何时附加到输入并自行更改为文本字段。例如(工作代码):
<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
<meta charset="UTF-8">
<title>Test</title>
<link data-require="ng-grid@2.0.14" data-semver="2.0.14" rel="stylesheet" href="https://cdn.rawgit.com/angular-ui/ng-grid/v2.0.14/ng-grid.css" />
<script data-require="jquery@2.0.3" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.7/angular.js" data-semver="1.3.7" data-require="angular.js@*"></script>
<script data-require="ng-grid@2.0.14" data-semver="2.0.14" src="https://cdn.rawgit.com/angular-ui/ng-grid/v2.0.14/build/ng-grid.js"> </script>
<style>
body {
height: 500px;
}
form {
height: 500px;
}
.gridStyle {
height: 500px;
}
input[type='file'] {
color: rgba(0, 0, 0, 0);
}
input[type='file']:after {
content: attr(filename);
margin: 0 0 0 5px;
color: #000;
}
</style>
</head>
<body ng-controller="merchantController">
<form name="gridform">
<div class="gridStyle" ng-grid="gridOptions"></div>
</form>
<script>
var app=angular.module('myApp',['ngGrid']);
app.directive('fileUpload', function () {
return {
link: function (scope, elem, attrs) {
elem.on('change', function () {
var filename = this.files[0].name;
var index = attrs.index;
var row = scope.people[index];
row.filename = filename;
scope.$apply();
});
}
}
});
app.controller('merchantController',function($scope,$timeout) {
$scope.people = [{"name": "sd", "place": "hyd1", filename: ''}, {"name": "sd", "place": "hyd2", filename: ''}, {"name": "sd", "place": "hyd3", filename: ''}, {"name": "sd", "place": "hyd4", filename: ''}, {"name": "sd", "place": "hyd5", filename: ''}, {"name": "sd", "place": "hyd6", filename: ''}];
$scope.gridOptions = {
data: 'people',
columnDefs: [{
field: 'name',
cellTemplate: '<input type="text" ng-model="row.entity.name"/>'
}, {
field: 'place',
cellTemplate: '<input type="text" ng-model="row.entity.place"/>'
}, {
displayName: 'Browse',
cellTemplate: '<input type="file" file-upload name="img{{row.rowIndex}}" index="{{row.rowIndex}}" filename={{row.entity.filename}} />'
}, {displayName: "Remove", cellTemplate: '<button ng-click="remove(row.rowIndex)">Remove</button>'}]
};
$scope.remove = function (ind) {
var index = this.row.rowIndex;
$scope.gridOptions.selectItem(index, false);
var form = document.forms.namedItem("gridform");
form.elements["img" + index].value = "";
$scope.people.splice(index, 1);
};
});
</script>
</body>
</html>
var app = angular.module('myApp',['ngGrid']);
app.controller('merchantController',function($scope, $timeout) {
$scope.people = [
{"name":"sd","place":"hyd"},
{"name":"sd","place":"hyd"},
{"name":"sd","place":"hyd"}
];
$scope.gridOptions = {
data:'people',
columnDefs:[
{field:'name', cellTemplate:'<input type="text" ng-model="row.entity.name"/>'},
{field:'place',cellTemplate:'<input type="text" ng-model="row.entity.place"/>'},
{displayName:'Browse',cellTemplate:'<input type="file" name="img{{row.rowIndex}}" ng-model="row.entity.filename"/>'},
{displayName:"Remove",cellTemplate:'<button ng-click="remove(row.rowIndex)">Remove</button>'}
]
};
$scope.remove = function(ind) {
var index = this.row.rowIndex;
$scope.gridOptions.selectItem(index, false);
var form=document.forms.namedItem("gridform");
form.elements["img"+index].value="";
$scope.people.splice(index,1);
};
});
<!DOCTYPE html>
<html ng-app="myApp" lang="en-US">
<head>
<link data-require="ng-grid@2.0.14" data-semver="2.0.14" rel="stylesheet" href="https://cdn.rawgit.com/angular-ui/ng-grid/v2.0.14/ng-grid.css" />
<script data-require="jquery@2.0.3" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.7/angular.js" data-semver="1.3.7" data-require="angular.js@*"></script>
<script data-require="ng-grid@2.0.14" data-semver="2.0.14" src="https://cdn.rawgit.com/angular-ui/ng-grid/v2.0.14/build/ng-grid.js"> </script>
<script data-require="ng-grid@2.0.14" data-semver="2.0.14" src="https://cdn.rawgit.com/angular-ui/ng-grid/v2.0.14/plugins/ng-grid-flexible-height.js"></script>
</head>
<body ng-controller="merchantController">
<form name="gridform">
<div class="gridStyle" ng-grid="gridOptions"></div>
</form>
</body>
</html>
我想删除相应的行,当删除按钮是clicked.The行正在被删除,但下一行的文件也被删除。
您的代码一切正常,但这是浏览器的问题,因为浏览器不会更改 input[type="file"]
的正确 files
属性。您必须声明指令以监视文件何时附加到输入并自行更改为文本字段。例如(工作代码):
<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
<meta charset="UTF-8">
<title>Test</title>
<link data-require="ng-grid@2.0.14" data-semver="2.0.14" rel="stylesheet" href="https://cdn.rawgit.com/angular-ui/ng-grid/v2.0.14/ng-grid.css" />
<script data-require="jquery@2.0.3" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.7/angular.js" data-semver="1.3.7" data-require="angular.js@*"></script>
<script data-require="ng-grid@2.0.14" data-semver="2.0.14" src="https://cdn.rawgit.com/angular-ui/ng-grid/v2.0.14/build/ng-grid.js"> </script>
<style>
body {
height: 500px;
}
form {
height: 500px;
}
.gridStyle {
height: 500px;
}
input[type='file'] {
color: rgba(0, 0, 0, 0);
}
input[type='file']:after {
content: attr(filename);
margin: 0 0 0 5px;
color: #000;
}
</style>
</head>
<body ng-controller="merchantController">
<form name="gridform">
<div class="gridStyle" ng-grid="gridOptions"></div>
</form>
<script>
var app=angular.module('myApp',['ngGrid']);
app.directive('fileUpload', function () {
return {
link: function (scope, elem, attrs) {
elem.on('change', function () {
var filename = this.files[0].name;
var index = attrs.index;
var row = scope.people[index];
row.filename = filename;
scope.$apply();
});
}
}
});
app.controller('merchantController',function($scope,$timeout) {
$scope.people = [{"name": "sd", "place": "hyd1", filename: ''}, {"name": "sd", "place": "hyd2", filename: ''}, {"name": "sd", "place": "hyd3", filename: ''}, {"name": "sd", "place": "hyd4", filename: ''}, {"name": "sd", "place": "hyd5", filename: ''}, {"name": "sd", "place": "hyd6", filename: ''}];
$scope.gridOptions = {
data: 'people',
columnDefs: [{
field: 'name',
cellTemplate: '<input type="text" ng-model="row.entity.name"/>'
}, {
field: 'place',
cellTemplate: '<input type="text" ng-model="row.entity.place"/>'
}, {
displayName: 'Browse',
cellTemplate: '<input type="file" file-upload name="img{{row.rowIndex}}" index="{{row.rowIndex}}" filename={{row.entity.filename}} />'
}, {displayName: "Remove", cellTemplate: '<button ng-click="remove(row.rowIndex)">Remove</button>'}]
};
$scope.remove = function (ind) {
var index = this.row.rowIndex;
$scope.gridOptions.selectItem(index, false);
var form = document.forms.namedItem("gridform");
form.elements["img" + index].value = "";
$scope.people.splice(index, 1);
};
});
</script>
</body>
</html>