# 增加删除按钮
klass/index.html
```
<td><a ng-href="#!/klass/edit/{{klass.id}}">编辑</a> <button ng-click="del($index, klass)">删除</button></td>
```
同时,我们增加发生错误或产生消息时的提醒
```
<div class="row">
<div class="col-md-12">
<div ng-show="message" class="alert alert-success" role="alert">{{message}}</div>
<div ng-show="isError" class="alert alert-danger" role="alert">{{errors}}</div>
</div>
</div>
...
```
# 完善C层
klass/index.js
```
$scope.message = ''; // 消息
$scope.error = ''; // 错误消息
// 设置提示消息
var setMessage = function (message) {
$scope.message = message;
$scope.error = '';
$timeout(function() {
$scope.message = '';
}, 1500);
}
// 设置错误提示消息
var setError = function (error) {
$scope.error = error;
$scope.message = '';
$timeout(function() {
$scope.error = '';
}, 1500);
}
// 删除, 注意这里的参数,不能使用klass, 原因是:....
var del = function (index, klassEntity) {
console.log(index);
console.log(klassEntity);
};
...
$scope.del = del;
```
上面,我们定义了两个setxxx,但由于在下面的代码中没有应用,所以会出现两个警告。等下面完善代码后就没有了。
# M层
services/klass.js
```
// 删除
var del = function (id, callback) {
server.http({
method:'GET',
url: '/klass.Delete.json?id=' + id,
}, function(response) {
callback(response);
});
};
...
update: update,
del: del
};
```
## 单元测试
```
...
// 增加del
url = config.apiRootPath + '/klass.Delete.json?id=1';
$httpBackend.when('GET', url).respond(data);
...
// 调用del
klass.del(1, function(){
console.log('klass del 通过');
});
```
# C层对接
```
// 删除, 注意这里的参数,不能使用klass, 原因是:....
var del = function (index, klassEntity) {
klass.del(klassEntity.id, function(response) {
// 发生错误
if (!angular.equals({}, response.errors)) {
setError('系统发生错误');
console.log(response.errors);
// 删除成功
} else if(response.errorMessages.length === 0) {
setMessage('删除成功');
console.log(index);
$scope.klasses.splice(index, 1);
// 发生警告
} else {
setMessage('系统失败:' + response.errorMessages.toString());
}
});
};
```
## 测试
![https://box.kancloud.cn/ac8cb1b21badc74904c1d63a9fe4eac8_731x264.gif](https://box.kancloud.cn/ac8cb1b21badc74904c1d63a9fe4eac8_731x264.gif)
# 总结
由于我们在前期的命名问题,在这里产生了实体与M层的冲突,看来正确的命名还是非常必要的。以后,我们的服务器,全部起名为`xxxServer`。
至此,前端的基本开发讲解完毕。其实的更复杂的操作,其实现的步骤基本如此。无非就是找到接口,传对数据,然后按返回的数据进行接收后并处理。细节还待我们在实际开发中具体掌握。
- README
- 第一章:准备
- 第二章:Hello World!
- 第一节:查看工程文件
- 第二节:JDK、JRE与环境变量
- 第三节:index.jsp
- 第三章:Hello Struts
- 第一节:Web.xml
- 第二节:单入口
- 第三节:Hello Struts
- 第四节:触发C层
- 第四章:建立数据表
- 第一节:建立实体类
- 第二节:测试一
- 第三节:测试二
- 第四节:引入Hibernate
- 第五节:配置Hibernate
- 第六节:建立连接
- 第七节:实体类映射数据表
- 第八节:完善数据表
- 第五章:教师管理
- 第一节:增加数据--add
- 第二节:增加数据--save
- 1 获取传入数据数据
- 2 数据写入测试
- 3 对接C层
- 第三节:数据列表
- 1 获取数据
- 2 重构代码
- 3 C层对接--初始化
- 4 C层添加数据
- 5 V层显示数据
- 6 获取数据库中数据
- 7 显示性别
- 8 分页
- 9 条件查询
- 第四节:修改数据
- 1 edit
- 2 update
- 第五节:删除数据
- 第六节:总结
- 第六章:重构C层
- 第一节:继承ActionSupport类
- 第二节:数据验证
- 第七章:前台分离(前台)
- 第一节:环境搭建
- 第二节:运行环境
- 第三节:共享开发环境
- 第四节:生产环境
- 第八章:前台开发(前台)
- 第一节:本地化
- 第二节:教师列表
- 1 引入M层
- 2 模拟后台返回数据
- 3 C与M对接
- 4 C与V对接
- 第九章:前后台对接(前后台)
- 第一节:后台输出json(后台)
- 第二节:对接前台(全栈)
- 第二节:对接API(前台)
- 第二节:跨域请求(后台)
- 第三节:重构代码(前台)
- 第十章:重构后台M层
- 第一节:数据访问DAO层
- 第二节:项目整体重构
- 第十一章:用户登陆(前后台)
- 第一节:制定规范
- 第二节:定制测试用例
- 第三节:后台输入测试代码(后台)
- 第四节:postman(后台)
- 第五节:新建用户登陆模块(前台)
- 第六节:代码重构(前台)
- 第十二章:班级管理(前后台)
- 第一节:班级列表
- 1 原型开发
- 2 制定规范
- 3 后台对接开发
- 4 前台对接开发
- 第二节:Add
- 1 原型开发
- 2 制定规范
- 3 后台对接开发
- 4 前台对接开发
- 第三节:Save
- 1 制定规范
- 2 后台对接开发
- 3 前台对接开发
- 第四节:Edit
- 1 原型开发
- 2 制定规范
- 3 后台对接开发
- 4 前台对接开发
- 第五节:Update
- 1 制定规范
- 2 后台对接开发
- 3 前台对接开发
- 第六节:Delete
- 1 制定规范
- 2 后台对接开发
- 3 前台对接开发
- 第七节:小结
- 第十三章:班级管理(API)
- 第一节:ER图
- 第二节:create
- 1 实体层
- 2 dao层
- 3 service(server)层
- 4 action层
- 第三节:ManyToOne
- 第四节:Read
- 1 service(server)层
- 2 action层
- 第五节:update
- 1 service(server)层
- 2 action层
- 第六节:update
- 第十四章:重构服务层