多路由单组件
当我们使用单个组件绑定多个路由的时候,路由的跳转并不能再次触发组件的重建,此时我们需要对路由进行监视。
使用同一组件进行新建以及编辑
这里我们将修改ServiceAdd组件,来进行新建以及编辑的不同处理。
添加编辑路由
我们在main.js中添加编辑服务的路由,与新建使用一个组件;
将组件初始化事件进行调整
接下来我们调整组件的初始化事件,使其判断当前路由并进行相关处理:
mounted() { var that = this;// 初始化检测that.init(); // 设置iCheck插件初始化SetICheck(that); // 设置switchery插件初始化SetSwitchery(that); // 设置daterangepicker插件初始化SetDaterangepicker(that, '#single_cal3');}, // 监视路由watch: {$route() {// 当路由改变,进行初始化检测this.init();} };
相关时间处理
下面是一些初始化检测,以及相关调用的事件
methods: { // 初始化事件init() {var that = this; // isEdit?if (that.$route.params.id) { that.edit(that.$route.params.id);} else {var data = initData(); // 初始化默认值that.setChange(data); $.each(data, (key, item) => { that.$set(that, key, item);}); }}, // 编辑事件 edit(id) { var that = this;that.$set(that, 'isNew', false); // 获取服务数据,这里使用模拟数据$.get(`./static/service1.json`, repo => { // 设置组件data的值that.setChange(repo);$.each(repo, (key, item) => { that.$set(that, key, item); });});}, // 对插件进行赋值设置 setChange(item) { var that = this;// 设置iCheck赋值 $(`input.flat[name="type"][value="${item.type}"]`).iCheck('check');// 设置switchery赋值 if (item.state !== that.state) {$('.js-switch[name="state"]').trigger('click');} if (item.directIssue !== that.directIssue) { $('.js-switch[name="directIssue"]').trigger('click');} }, submit() { var that = this,text;// 先做一些简单的校验,不通过则显示错误信息 if (!that.name) {text = '请填写名称';}if (text) {that.error.text = text;that.error.shown = true;return;} that.error.shown = false;var that = this; that.$router.push('/app/terminals'); }}
页面效果
新建
编辑
结束语
当初对于多个路由匹配单个组件,本骚年还以为一定会有一些方法,在路由改变的时候进行销毁重建组件,后来找不到,最终也就监视路由进行处理。虽然有可能是本骚年太蠢没找到对应的方法调用,但是其实这种监视路由处理的方法或许更合理一些呢。
转载请注明: Vue教程中文网 - 打造国内领先的vue学习网站-vue视频,vue教程,vue学习,vue培训 » vue教程【九】- 监视路由