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: [],
要使用 Vue 创建一个新闻展示,可以结合 Vue 的组件化思想、数据请求(如通过 Axios 获取新闻数据)以及动态渲染列表等功能。以下是一个完整的实现步骤和代码示例: ### 1. 初始化项目 首先,确保你已经安装了 Vue CLI,并创建一个新的 Vue 项目: ```bash vue create news-app ``` ### 2. 安装 Axios 为了从后端获取新闻数据,我们需要安装 Axios: ```bash npm install axios ``` ### 3. 创建新闻展示组件 在 `src/components` 目录下创建一个名为 `NewsList.vue` 的组件。 **NewsList.vue** ```vue <template> <div class="news-list"> <h1>新闻列表</h1> <ul> <li v-for="(news, index) in newsList" :key="index" class="news-item"> <h2>{{ news.title }}</h2> <p>{{ news.content }}</p> <small>发布日期: {{ news.date }}</small> </li> </ul> </div> </template> <script> import axios from 'axios'; export default { name: 'NewsList', data() { return { newsList: [] }; }, created() { this.fetchNews(); }, methods: { async fetchNews() { try { const response = await axios.get('https://api.example.com/news'); // 替换为实际的 API 地址 this.newsList = response.data; } catch (error) { console.error('获取新闻失败:', error); } } } }; </script> <style scoped> .news-list { margin: 20px; } .news-item { border: 1px solid #ccc; padding: 15px; margin-bottom: 10px; border-radius: 5px; } </style> ``` ### 4. 主应用文件 在 `App.vue` 中引入并使用 `NewsList` 组件: **App.vue** ```vue <template> <div id="app"> <h1>欢迎来到新闻展示</h1> <NewsList /> </div> </template> <script> import NewsList from './components/NewsList.vue'; export default { name: 'App', components: { NewsList } }; </script> ``` ### 解释: 1. **Axios 数据请求**:在 `NewsList.vue` 中,我们使用 Axios 从后端 API 获取新闻数据,并将其存储在 `newsList` 中。 2. **动态渲染列表**:通过 `v-for` 指令遍历 `newsList` 数组,动态生成新闻项。 3. **生命周期钩子**:在 `created` 生命周期钩子中调用 `fetchNews` 方法,确保组件加载时自动获取新闻数据。 ### 5. 运行项目 运行项目以查看效果: ```bash npm run serve ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值