vue实战问题,项目经验。

人是个健忘的动物,或者说我是个健忘的人。

我得好好记一下遇到的一些问题和解决方式,这样以后再遇到可以不用抓耳挠腮我做过的,我会的,怎么做来着?让我想想!麻蛋的想不起来了,好像是这样子?不对!妈的百度看看。

像你吗个二百五!好记性不如烂笔头,烂笔头不如简书写一篇。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

首页头部栏的搜索功能,全局搜索。

直接跳转查询界面,然后这个很简单,输入框回车事件push到查询界面,然后将值一块儿带过去,初始化查询界面。

可是问题来了,现在查询这个组件里继续输入然后回车。这时候路由是没变化的,组件里的钩子也不会再次执行。怎么监测到搜索内容变化呢。

首先想到的是监测路由数据变化,后来发现太low,

再次想到的是监测vuex数据,搞了半天还是不行。

最后使用了非父子组件传值,

建立一个bus文件,文件建一个bus.js

内容就是引入vue,建立一个空的vue实例。

在头部搜索栏的组件里引入bus,用bus.$emit()触发一个事件传值,也就是搜索框的回车时触发。在查询界面引入bus,之后bus.$on()得到数据变化。然后做出相应的操作。

这里要注意一定不能使用bus.$(‘value',function(val){});因为这样的话,你的函数里的this会指向空实例bus。所以我们必须使用es6的写法,val => {};这样的话this会指向当前查询界面的实例。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

vue打印功能,window.open(url}这个东西很多bug。第一用户体验,用户必须允许否则就无法弹出,第二响应时间超过一定时间则无法弹出。

解决方法:

跳转一个指定界面,然后重定向。

var newWindow= window.open('')


setTimout(()=>{

    newWindow.location.href = '新的url'

},3000);

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

软删除数据如何过滤

我们的网站删除如果是后台数据库已有数据是不能硬删除的,只能修改某个字段然后标记为删除,叫做软删除。

这样的话我们的前端界面渲染时就需要过滤掉你刚刚删除的数据

我的项目里是用的table然后给了tableData | filterData

filterData:

var newData = [];

for(let key of tableData){

    if(key.removed !== 1){ newData.push(key) }

    return newData

}

简单解释:就是全局过滤器获取原数据,然后如果某个字段是已经删除了,也就是软删除改变了字段的数据,就不管他了,其他的就生成一个新数组然后返回。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

共用界面如何刷新

项目里一个费用申报单界面是共用的,很多地方过来查看和编辑也是这个路由这个组件,只是很多input的内容是空或者是不能编辑只能看。

问题来了,你来到这个界面后查看完了突然想我想现在编辑一个申报单,可是此时此刻你点击路由这个组件是不会更新的,因为vue觉得你已经在这个界面了,他是不会理你的。

使用过几个路由钩子,什么routerberfor……,什么放在app.vue里,都只能检测到路由离开进来的变化,而无法就在当前路由点击当前路由的辩护。

解决方法使用watch 监测路由

//监视路由变化,然后初始化界面。

  watch: {

    '$route' (to, from) {

        alert('路由改变了');

    }

  }

路由配置:

path:url/:val

不管是插件还是你自己写的头部菜单,都一定有一个事件监听到你点击当前路由。在这个事件里我们来处理

let val = new Date();

this.$router.push({

    path: url/val

})

这样你就可以在你的组件里监听到路由变化了。然后也就可以做出相应的操作。原理就是利用参数的变化呗,时间new出来的永远都是不一样的。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

表单重置

项目中很多时候界面的数据不需要清除,但是一些操作会触发验证事件,然后一串红字你不达到条件就不会消失,这时候很难受,所以就有了重置表单的验证。

关于表单重置,我使用的是element-ui自带的resetFields()事件。

我们唯一要注意的是,不能再created()钩子中使用,因为this.$refs[formname]中的ref,一定要加载完后才能找到的。否则会报错说你resetFields()事件未定义。所以一定要在mounted()钩子中使用。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容