Vue 做新闻展示页

单页面应用缓存与路由优化

需求

1.  做一个新闻展示页
2.  新闻分类可以自定义
3.  每类新闻的内容,样式不一样
4.  上拉加载新的数据
5.  点击进入详情页,再返回时,定位到原来的位置

图片展示







采用的技术

轮播图使用:swiper
zepto.js
vue.js
vue.resource.js
vue-router.js
滑动插件:iscroll.js
界面样式采用的 weui

设计的思路

因为使用了vue.js 每个分类的样式不一样,而且分类是可以配置的。所以呢,想到了单页面应用,所以选择了vue-router.js的路由。也使用了vue.resource 插件用来做数据传输。
因为我比较菜,所以呢还是使用的原始的引入方式,没有使用webpack之类的打包工具,就最原始的js 写法。

难点

使用了路由,是为了返回的时候,可以回到刚才离开的地方,vue虽然有自带的keep-alive 但是似乎必须使用路由的history模式,还要修改服务器端的东西,所以感觉不是很合适。而且我们需要Ajax加载数据,怎样能返回路由的时候,展示ajax加载的内容呢?

我想到了记录个数,每次进入路由再从这个数开始加载,但是呢我们没有下拉更新,用户再也看不到之前看的内容。

后来我想到了H5 的缓存方法。使用了sessionStorage。

sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。

再离开一个路由之前,把这个路由现在状态信息全部记录下来(包括提示语,滑动位置,新闻内容等),等下次进入这个路由的时候,再取出来数据这样就实现了不管加载多少数据,再次进入这个路由的时候,都可以和上一个衔接上。

下图为存在缓存里面的内容。而且一关闭浏览器数据会被清空
这里写图片描述

有一个重要的地方是:sessionStorage 是有最大容量的,应该是有容量限制的,我找了找localStorage 5M左右,sessionStorage 我还没有找到,但在项目中运行情况来看,暂时稳定。

重要代码展示

路由的定义

这里写图片描述

重点的是每个组件里面的方法

这里写图片描述

每个组件都共用的data , createmethods_all

 var returndata={
        swipertime:swipertime,
        demoData: [],
在HTML中使用Vue.js新闻展示,首先你需要安装Vue和相关的库,如Vue Router用于导航管理,Vuex用于状态管理。以下是一个简单的步骤: 1. **设置基础环境**:创建一个新的Vue项目,可以使用Vue CLI工具或者手动引入`<script>`标签。 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Vue News Display</title> <script src="https://cdn.jsdelivr.net/npm/vue@2"></script> </head> <body> <div id="app"> <!-- 渲染新闻列表将放在这里 --> </div> <script src="main.js"></script> </body> </html> ``` 2. **创建组件**:创建一个`NewsItem.vue`文件,用于显示单条新闻,然后在`App.vue`中引入并渲染这个组件。 ```html <!-- NewsItem.vue --> <template> <div> <h2>{{ title }}</h2> <p>{{ content }}</p> </div> </template> <script> export default { name: 'NewsItem', props: { item: { type: Object, required: true } }, computed: { title() { return this.item.title; }, content() { return this.item.content; } } } </script> ``` 在`App.vue`中: ```html <template> <div id="app"> <ul> <li v-for="news in newsList" :key="news.id"> <NewsItem :item="news" /> </li> </ul> </div> </template> <script> import NewsItem from './NewsItem.vue'; export default { components: { NewsItem }, data() { return { newsList: [ // 初始化新闻数据 { id: 1, title: '新闻标题1', content: '新闻内容1' }, // 添加更多新闻... ] }; } }; </script> ``` 3. **路由和状态管理(可选)**:如果需要跳转到详细或者其他新闻列表,可以使用Vue Router,对于复杂的业务逻辑,可能会用到Vuex进行状态管理。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值