vue 项目使用经验

来源:互联网 发布:女童长裤春秋淘宝网 编辑:程序博客网 时间:2024/05/29 08:22

1、路由组件上请求的绑定

    一般从一个路由跳转到并一个,这种都绑定在route activate 方法上。

如果路由有参数:id 当在路由上直接修改参数回车?发现内容并未改变。再回车就刷新页面了,这时才加载请求。

相当于修改了参数后需要f5刷新才能显示。绑定在ready上也一样。它用于初始化组件时用,对于修改参数时并没有初始化所以无法。

解决修改路由参数触发请求事件--解决:

   在初始化或勾子上绑定初始化请求。watch 监听$route.params  路由参数变化,并调用请求方法。这样在路由定义的参数修改了。就会触发请求。

这只是我的解决。

----路由分析

在当前路由上直接修改参数是不会有变化的。因为路由没变。当切换了路由如当前在detail 下切换到了list下再从列表链接切换到了detail并改变了参数。

这时路由会执行勾子函数,但是ready不一定会执行。因为route-view 配置了keep-alive 缓存时,detail在第一次时会执行ready,之后就不会执行了。

除非刷新页面。但是路由切换时勾子会执行。因为路由发生了本质变化 了,而不只是参数变化 。

所以一般意见绑定在勾子上。

2、子路由参数切换时保存当前参数状态下的搜索数据。


如上图,在此路由状态下,有三个分类,下边分类列表和搜索。

我把列表搜索这块做成了子路由subRoutes 下定义。当点击分类时切换子路由显示数据。

这用到了1里的监听路由params。

但是这里还有一个问题,就是每个列表的搜索状态。当在1分类下搜索了,切换到2分类下时1的搜索数据还在,汗。

这是因为切换并没有重新加载子路由而是,监听params触发的请求更新的数据。而search搜索对象并没有改变。

所以切换时搜索状态是公用的。

解决思路:

    search对象存储当前的状态,在searchs里存储所有状态的search对象。当切换时从searchs里读取typeid 的search对象,赋值给search。

因为分类是动态的,所以需要一个Initsearch存储初始对象。当运行时判断searchs 里是否有typeid的对象,没有initsearch 赋值添加到searchs,并赋值给search。

有呢从searchs里取出来赋值给search对象。当在本参数下操作时也就是search变化时需要保存到searchs里。

if(this.$route.params.type==undefined){return ;}var newids=this.$route.params.type+'_'+this.$route.params.id;if(this.ids==newids){//console.log('==')var obj=Object.assign({},this.search)var s=Object.assign({},this.searchs)    s[this.ids]=obj;    this.$set('searchs',s);}else{this.ids=newids;if(this.searchs[this.ids]){    var obj=Object.assign({},this.searchs[this.ids]);    console.log(this.ids,'----',obj)    this.search=obj;    }else{    var obj=Object.assign({},this.initsearch)    var s=Object.assign({},this.searchs)    s[this.ids]=obj;    //console.log('s----',s);    this.$set('searchs',s);    this.search=obj;        }}//this.ids=this.$route.params.type+'_'+this.$route.params.id;       // console.log(this.searchs)if(casetxt){        if( casetxt=='search' &&         this.search.searchtxt.length==''){          return ;        }        this.search.page=1;           }    this.search.type=this.$route.params.id;
//以上是ajax

3、socket.io 本地websocket 和mockjs 冲突。

mockjs 在页面里会拦截ajax请求,而socket.io 模块本地链接用的是http而不是ws方式。

所以socket的请求也会被拦截修改。无法实现。

解决方法是把mock放在node 服务端,在express 的get post 里用创建mock并用res.send返回json

var s=Mock.mock({'data|5-8':[{'id|+1':1,'title':"@csentence(20)"}],'totalPages|2-5':0,'errorCode':0});res.send(s);




  


0 0
原创粉丝点击