VUE的created()生命周期方法和watch监听的使用
在使用过程中,两个路由地址用到了同一个页面,需要根据某条件判断是哪个路由过来的,做出不同的处理。例如如下页面:添加讲师的路由在左侧显示了出来,但是修改讲师是隐藏的路由。添加讲师和修改讲师用到了同一个页面,但是由不同的路由地址进行跳转,修改需要回显讲师数据信息,所以需要加以判断。在设置路由时,可以在修改的路由上做如下设置:{path: 'updateTeacher/:id',name: '修改讲师'
在使用过程中,两个路由地址用到了同一个页面,需要根据某条件判断是哪个路由过来的,做出不同的处理。
例如如下页面:
添加讲师的路由在左侧显示了出来,但是修改讲师是隐藏的路由。
添加讲师和修改讲师用到了同一个页面,但是由不同的路由地址进行跳转,修改需要回显讲师数据信息,所以需要加以判断。
在设置路由时,可以在修改的路由上做如下设置:
{
path: 'updateTeacher/:id',
name: '修改讲师',
component: () => import('@/views/edu/teacher/save'),
meta: { title: '修改讲师' },
hidden: true
}
路由地址后边跟着:id,“id”只是一个变量名,随便写,后续用到了地址中的这串数据,需要从路由对象中以“id”取。 看着和springMvc中请求地址上的{id}很像,例如:@requestMapping("/getList/{id}"),那么在入参上用@PathVariable取出。
此例中,这是讲师实体的id。
跳到这个路由的时候,地址后边跟上id数据,如:
<router-link :to="'/teacher/updateTeacher/'+scope.row.id">
<el-button type="primary" size="mini" icon="el-icon-edit">修改</el-button>
</router-link>
那么跳转后的路由就是这样(看地址栏,带上了ID):
然后在修改页面中,可以通过this.$route.params.id取出地址后的id值。
由于这个判断会被复用,我抽成了一个叫init的函数。
//判断是否是更新,是更新则根据id查出讲师数据回显
init(){
if(this.$route.params && this.$route.params.id){
const id = this.$route.params.id
this.getTeacherById(id)
}else{
this.teacher = {}
}
}
所以,最后的处理就是,在修改页面,我们在create生命周期方法中,进行调用init方法进行判断,看到底是新增还是修改,是修改则查询数据进行回显,是新增那就需要清空输入框,为什么清空?稍后说。
代码如下:
create方法会在页面加载完成之前调用,也就是渲染前
created(){
this.init()
},
但是,这样会有一个问题,由于新增和修改用的是一个路由,那么当我点击修改以后,页面是有回显内容的,接着点击一下新增,页面中的回显数据依然存在,业务上我们是需要它清空的,所以我在自定义的init方法判断中,加了个else,但是,没有效果。
之所以没有效果,就是因为生命周期问题。
当点击了修改,页面渲染完成之前,会进行判断,然后是否回显数据。当我们接着点击新增,由于新增的路由指向的依然是此页面,所以不会执行crate函数了。
想接着点击新增还能进行init的判断,那么就需要加上一个监听,watch,代码:
watch:{
$route(to, from){
this.init()
}
}
它会对路由进行监听,如果路由发生了变化,就会调用init方法,进行判断是否进行数据回显。
更多推荐
所有评论(0)