angular路由缓存
⑴ angularJs ui-router路由之多视图实现菜单缓存切换
**
**
一个模板中存在多个ui-view,每个ui-view都存在唯一的名称作为标识,通过v-show来判断当前的ui-view是否显示,实现如下图效果
以上可以实现基本的菜单切换,但是需要注意的是:
1.每个页面模块的controller的命名不能相同,否则会出现调用方法的混乱,可能会进入到另一个同名的controller中调用方法;
2.当使用此方法对页面进行缓存,如果打开多个模块用到websocket接受服务器消息时,不能使用WebSocket.onmessage监听和接受服务器消息,否则可能会调用其他controller中WebSocket.onmessage,当前的页面模块就会监听不到服务器消息,这时我们可以使用
socket.addEventListener('message', function (event) {
console.log('Message from server ', event.data);
});
进行服务器消息的监听,并在方法体内做判断,是否是当前页面需要的。
3.如果某个页面的弹出框用到了路由调用则弹框中的页面不会显示,所以建议不要在弹框中直接调用路由加载页面,或者可以在index.jsp中:
4.如果几个模块views里面的name一样,则会出现加载的页面重复的问题;
5.style样式:如果多个模块存在相同名称的选择器,则样式会冲突;
还有些问题会在后面慢慢补充。
6.页面打开太多会出现卡顿现象
7.一定要引入 <script src="vendor/angular/angular-ui-router-ext/ct-ui-router-extras.min.js"></script> ,否则会出现ui-view没有缓存的情况
⑵ 怎么清楚angular的js文件缓存
1如果用AngularJs在IE下发出GET请求从后台服务取完Json数据再绑定到页面上显示的话,你可能会发现就算数据更新了,IE还是会显示原来的结果。实际上这时候IE的确是缓存了hashtag,没有再次去做Http GET请求最新的数据。
2最直接的办法是在后台撸掉OutputCache,但这种做法并不推荐,需要改每一处被Angular调用的地方,代价太大。这种问题应该在前端解决最好。研究了一会儿总结了最有效的解决方法,并不需要改后台代码了。