谷粒学院(七)讲师列表前端实现(下)

简介: 谷粒学院(七)讲师列表前端实现

二、讲师删除功能


1、在每条记录后面添加删除按钮


2、在按钮绑定事件 @click="removeDataById"


3、在绑定事件的方法传递删除讲师的id值 @click="removeDataById(scope.row.id)"


4、在api文件夹teacher.js 定义删除接口


//删除讲师
removeById(id) {
    return request({
        url: `/eduservice/teacher/removeById/${id}`,
        method: 'delete'
    })
},

5、list.vue页面定义方法调用删除接口

//删除讲师
removeDataById(id){
    this.$confirm('此操作将永久删除讲师记录,是否继续?','提示',{
        confirmButtonText:'确定',
        cancelButtonText:'取消',
        type:'warning'
    }).then(()=>{//点击确定
        teacher.removeById(id).then((response)=>{
            this.$message({
                type:'success',
                message:'删除成功!' 
            }) 
            //回到列表页面
            this.getList()
        })
    }).catch((response) => { // 失败
        if (response === 'cancel') {
            this.$message({
                type: 'info',
                message: '已取消删除!'
            })
        } else {
            this.$message({
                type: 'error',
                message: '删除失败!'
            })
        }
    })
}

三、讲师添加功能

1、定义api

//添加
addTeacher(teacher) {
    return request({
        url: `/eduservice/teacher/addTeacher`,
        method: 'post',
        //data表示把对象转为json进行传递到接口里面
        data: teacher
    })
},

2、初始化页面组件==> >== 添加表单

add.vue

<el-form label-width="120px">
  <el-form-item label="讲师名称">
    <el-input v-model="teacher.name"/>
  </el-form-item>
  <el-form-item label="讲师排序">
    <el-input-number v-model="teacher.sort" controls-position="right" min="0"/>
  </el-form-item>
  <el-form-item label="讲师头衔">
    <el-select v-model="teacher.level" clearable placeholder="请选择">
      <!--
        数据类型一定要和取出的json中的一致,否则没法回填
        因此,这里value使用动态绑定的值,保证其数据类型是number
      -->
      <el-option :value="1" label="高级讲师"/>
      <el-option :value="2" label="首席讲师"/>
    </el-select>
  </el-form-item>
  <el-form-item label="讲师资历">
    <el-input v-model="teacher.career"/>
  </el-form-item>
  <el-form-item label="讲师简介">
    <el-input v-model="teacher.intro" :rows="10" type="textarea"/>
  </el-form-item>
  <!-- 讲师头像:TODO -->
  <el-form-item>
    <el-button :disabled="saveBtnDisabled" type="primary" @click="saveOrUpdate">保存</el-button>
  </el-form-item>
</el-form>

3、定义方法调用接口

<script>
import teacher from '@/api/edu/teacher'
export default {
  data() {
    return {
      teacher:{//这里边写不写属性都可,因为程序会自动把页面绑定的属性添加进去
        name:'',
        sort:0,
        level:1,
        career:'',
        intro:'',
        avatar:''
      },
      saveBtnDisabled: false//保存按钮是否禁用
    }
  },
  created() {
  },
  methods:{
    saveOrUpdate() {
      this.saveTeacher()
      this.saveBtnDisabled = true//禁止重复提交(可以不写,因为后续会跳转到查询页面)
    },
    //添加讲师方法
    saveTeacher(){
      teacher.addTeacher(this.teacher).then(response=>{
        this.$message({
          type:'success',
          message:'添加成功!'
        });
      }).catch(error=>{
        this.$message({
          type:'error',
          message:'添加失败!'
        });
      })
      //回到列表页面,进行路由跳转
      this.$router.push({path:'/teacher/list'})
    }
  }
}
</script>

四、讲师修改功能

1、添加修改按钮

<router-link :to="'/teacher/edit/'+scope.row.id">
  <el-button type="primary" size="mini" icon="el-icon-edit">修改</el-button>
</router-link>

2、点击修改按钮进入表单页面.先根据讲师 id 查询数据显示,之后进行表单提交,修改记录

3、在路由index页面添加路由

{
    path: 'edit/:id', //隐藏路由的写法. :id类似于sql中的占位符,用来接收参数
    name: '修改讲师',
    component: () =>
    import ('@/views/edu/teacher/add'), //因为修改和编辑使用同一个表单,所以使用同一个路由.
    meta: { title: '编辑讲师', noCache: true },
  hidden: true //将该路由进行隐藏,让用户看起来如同是在当前页面进行修改.
}

4、在表单页面进行数据回显

  • 在api中定义查询接口
//通过id获取用户信息(用于修改用户信息前的数据回显操作)
getById(id) {
    return request({
        url: `/eduservice/teacher/getById/${id}`,
        method: 'get',
    })
},


  • 在页面调用接口实现数据回显
//根据讲师id查询讲师
getTeacherInfo(id){
    teacher.getById(id)
        .then(response=>{
        this.teacher = response.data.teacher;
    })
},
  • 调用根据id查询的方法

因为添加和修改都使用add页面,区别添加还是修改,只有修改时候查询数据回显

依据:判断路径里面是否有讲师id值,如果有id值修改,没有id值直接添加。

created() {//页面渲染之前执行
  //判断路径是否有id值
  if(this.$route.params && this.$route.params.id) {
    //从路径获取id值
    const id = this.$route.params.id
    //调用根据id查询的方法
    this.getTeacherInfo(id)
  }
},

5、进行讲师表单提交

  • 在api中定义更新接口
//根据id修改讲师
updateById(teacher) {
    return request({
        url: `/eduservice/teacher/updateById`,
        method: 'put',
        data: teacher
    })
}
  • 在add.vue页面中调用修改Api
saveOrUpdate(){
    if(!this.teacher.id){//通过判断id属性是否为空,来决定是添加还是修改
        //添加
        this.saveTeacher();
    }else{
        this.updateTeacher();
    }
    this.saveBtnDisabled = true
},
  //修改讲师
    updateTeacher(){
        teacher.updateById(this.teacher)
            .then(response=>{
            this.$message({
                type:'success',
                message:'修改成功!'
            });      
        }).catch(error=>{
            this.$message({
                type:'error',
                message:'修改失败!'
            });
        })
        //回到列表页面,路由跳转
        this.$router.push({path:'/teacher/list'})
    }        

五、存在问题

点击修改进行数据回显,然后直接去点击添加讲师,进入表单页面,但是 表单页面还是显示修改回显数据,正确效果应该是表单数据清空。

错误的解决方式

在做添加讲师时候,表单数据清空就可以了。

created() {
//判断路径有id值,做修改
  if(this.$route.params && this.$route.params.id) {
    //从路径获取id值
    const id = this.$route.params.id
    //调用根据id查询的方法
    this.getInfo(id)
  }else {//路径没有id值,做添加
    //清空表单
    this.teacher = {}
  }
}

上面代码没有解决问题,为什么?

多次路由跳转到同一个页面,在页面中created方法只会执行第一次,后面在进行跳转不会执行的。【路由切换问题】

最终解决:使用vue监听

 created() {
    this.init()
  },
  watch:{//监听
    $route(to,from){//当路由路径发生变化时,方法就会被执行
      this.init()
    }
  },
  methods: {
    //初始化
    init(){
      //判断路径中是否有id来决定是否进行回显功能
      if(this.$route.params && this.$route.params.id){
        //从路径中获取id值
        const id = this.$route.params.id
        this.getTeacherInfo(id)//进行回显
      }else{
        this.teacher = {}
      }
    },
        ...
  }
相关文章
|
21天前
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查询,列表展示和字段转义处理
循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查询,列表展示和字段转义处理
|
20天前
|
存储 开发框架 前端开发
在Vue&Element前端项目中,对于字典列表的显示处理
在Vue&Element前端项目中,对于字典列表的显示处理
106 0
|
18天前
|
存储 开发框架 前端开发
EAV模型(实体-属性-值)的设计和低代码的处理方案(3)-- 实体属性定义及前端列表展示和数据录入处理
EAV模型(实体-属性-值)的设计和低代码的处理方案(3)-- 实体属性定义及前端列表展示和数据录入处理
|
21天前
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(8)--- 树列表组件的使用
循序渐进VUE+Element 前端应用开发(8)--- 树列表组件的使用
|
1月前
|
前端开发
react18【实战】tab切换,纯前端列表排序(含 lodash 和 classnames 的安装和使用)
react18【实战】tab切换,纯前端列表排序(含 lodash 和 classnames 的安装和使用)
23 1
|
2月前
|
JSON 前端开发 JavaScript
SSMP整合案例第五步 在前端页面上拿到service层调数据库里的数据后列表
SSMP整合案例第五步 在前端页面上拿到service层调数据库里的数据后列表
29 2
|
3月前
|
存储 缓存 监控
【Flutter前端技术开发专栏】Flutter中的列表滚动性能优化
【4月更文挑战第30天】本文探讨了Flutter中优化列表滚动性能的策略。建议使用`ListView.builder`以节省内存,避免一次性渲染所有列表项。为防止列表项重建,可使用`UniqueKey`或`ObjectKey`。缓存已渲染项、减少不必要的重绘和异步加载大数据集也是关键。此外,选择轻量级组件,如`StatelessWidget`,并利用Flutter DevTools监控性能以识别和解决瓶颈。持续测试和调整以提升用户体验。
97 0
【Flutter前端技术开发专栏】Flutter中的列表滚动性能优化
|
7天前
|
存储 前端开发 JavaScript
前端语言串讲 | 青训营笔记
前端语言串讲 | 青训营笔记
11 0
|
2月前
|
JSON 前端开发 JavaScript
前端Ajax、Axios和Fetch的用法和区别笔记
前端Ajax、Axios和Fetch的用法和区别笔记
55 2
|
2月前
|
前端开发 JavaScript 数据库
如何实现前后端分离-----前端笔记
如何实现前后端分离-----前端笔记