当前位置:首页 > VUE

vue实现新闻

2026-01-07 08:49:56VUE

Vue 实现新闻功能

使用 Vue 实现新闻功能通常涉及新闻列表展示、新闻详情页、分类筛选等模块。以下是实现的基本思路和代码示例。

新闻列表展示

通过 Vue 组件展示新闻列表,通常使用 v-for 指令循环渲染新闻数据。

<template>
  <div class="news-list">
    <div v-for="news in newsList" :key="news.id" class="news-item">
      <h3>{{ news.title }}</h3>
      <p>{{ news.summary }}</p>
      <span>{{ news.date }}</span>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      newsList: [
        { id: 1, title: '新闻标题1', summary: '新闻摘要1', date: '2023-01-01' },
        { id: 2, title: '新闻标题2', summary: '新闻摘要2', date: '2023-01-02' }
      ]
    }
  }
}
</script>

<style>
.news-list {
  padding: 20px;
}
.news-item {
  margin-bottom: 15px;
  border-bottom: 1px solid #eee;
}
</style>

新闻详情页

通过动态路由实现新闻详情页,使用 $route.params 获取新闻 ID。

vue实现新闻

<template>
  <div class="news-detail">
    <h2>{{ news.title }}</h2>
    <div>{{ news.content }}</div>
    <p>{{ news.date }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      news: {}
    }
  },
  created() {
    const newsId = this.$route.params.id
    this.fetchNewsDetail(newsId)
  },
  methods: {
    fetchNewsDetail(id) {
      // 模拟 API 请求
      const mockData = {
        1: { title: '新闻标题1', content: '新闻内容1', date: '2023-01-01' },
        2: { title: '新闻标题2', content: '新闻内容2', date: '2023-01-02' }
      }
      this.news = mockData[id]
    }
  }
}
</script>

路由配置

在 Vue Router 中配置动态路由,实现新闻详情页的跳转。

import Vue from 'vue'
import VueRouter from 'vue-router'
import NewsList from './components/NewsList.vue'
import NewsDetail from './components/NewsDetail.vue'

Vue.use(VueRouter)

const routes = [
  { path: '/news', component: NewsList },
  { path: '/news/:id', component: NewsDetail }
]

const router = new VueRouter({
  routes
})

export default router

新闻分类筛选

通过计算属性或方法实现新闻分类筛选功能。

vue实现新闻

<template>
  <div>
    <select v-model="selectedCategory">
      <option value="all">全部</option>
      <option value="sports">体育</option>
      <option value="tech">科技</option>
    </select>
    <div v-for="news in filteredNews" :key="news.id">
      <h3>{{ news.title }}</h3>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedCategory: 'all',
      newsList: [
        { id: 1, title: '体育新闻', category: 'sports' },
        { id: 2, title: '科技新闻', category: 'tech' }
      ]
    }
  },
  computed: {
    filteredNews() {
      if (this.selectedCategory === 'all') {
        return this.newsList
      }
      return this.newsList.filter(news => news.category === this.selectedCategory)
    }
  }
}
</script>

数据请求

使用 Axios 从后端 API 获取新闻数据。

import axios from 'axios'

export default {
  data() {
    return {
      newsList: []
    }
  },
  created() {
    this.fetchNews()
  },
  methods: {
    fetchNews() {
      axios.get('/api/news')
        .then(response => {
          this.newsList = response.data
        })
        .catch(error => {
          console.error('获取新闻失败:', error)
        })
    }
  }
}

分页功能

通过分页参数实现新闻列表的分页加载。

<template>
  <div>
    <div v-for="news in pagedNews" :key="news.id">
      <h3>{{ news.title }}</h3>
    </div>
    <button @click="prevPage" :disabled="currentPage === 1">上一页</button>
    <span>{{ currentPage }} / {{ totalPages }}</span>
    <button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      newsList: [],
      currentPage: 1,
      pageSize: 5
    }
  },
  computed: {
    totalPages() {
      return Math.ceil(this.newsList.length / this.pageSize)
    },
    pagedNews() {
      const start = (this.currentPage - 1) * this.pageSize
      const end = start + this.pageSize
      return this.newsList.slice(start, end)
    }
  },
  methods: {
    prevPage() {
      if (this.currentPage > 1) {
        this.currentPage--
      }
    },
    nextPage() {
      if (this.currentPage < this.totalPages) {
        this.currentPage++
      }
    }
  }
}
</script>

总结

通过 Vue 实现新闻功能需要结合组件化开发、路由管理、数据请求等技术。新闻列表展示使用 v-for 循环渲染,新闻详情页通过动态路由实现,分类筛选和分页功能通过计算属性或方法实现。实际项目中,数据通常从后端 API 获取,可以使用 Axios 或其他 HTTP 库。

标签: 新闻vue
分享给朋友:

相关文章

vue前端实现注册

vue前端实现注册

使用 Vue 实现用户注册功能 环境准备 确保已安装 Vue CLI 或通过 CDN 引入 Vue。若使用 Vue CLI,需安装 axios 或其他 HTTP 库用于后端通信。 注册表单组件 创建…

vue实现一个标签选择

vue实现一个标签选择

Vue 标签选择组件实现 基础实现 使用 Vue 的 v-for 和 v-model 指令可以快速实现标签选择功能: <template> <div class="tag-se…

实现vue模版

实现vue模版

Vue 模板的基本结构 Vue 模板基于 HTML 语法,通过 Vue 的指令和插值实现动态渲染。以下是一个基础模板示例: <template> <div id="…

vue grid实现

vue grid实现

Vue Grid 实现方法 在 Vue 中实现网格布局可以通过多种方式完成,包括使用原生 CSS Grid、第三方组件库或自定义组件。以下是几种常见方法: 使用原生 CSS Grid 通过 Vue…

vue实现心电图

vue实现心电图

Vue 实现心电图效果 在 Vue 中实现心电图效果通常需要结合 Canvas 或 SVG 进行动态绘图,模拟心电图数据的实时变化。以下是两种实现方式的核心思路和代码示例: 使用 Canvas 绘制…

vue实现影院

vue实现影院

Vue实现影院功能的基本思路 使用Vue框架开发影院功能需要结合前端组件化开发、状态管理以及后端API交互。以下是关键实现步骤: 影院页面布局设计 影院页面通常分为顶部导航栏、影院列表区域和底部导航…