最近我在学习前端开发,学习了Vue这一框架,并且尝试使用Vue搭建一个小说阅读网站。这个小说项目主要用到了Vue的组件化和路由功能。
首先,我采用了Vue CLI来搭建项目,这是一个Vue的脚手架工具,可以快速创建一个Vue项目。在创建项目时,我选择了Vue Router和Vuex这两个插件,它们分别实现了前端路由和状态管理。
vue create novel-project
cd novel-project
vue add router
vue add vuex
接着,我创建了几个Vue组件:书架、分类、搜索、阅读等等,每个组件都有自己的模板、样式和逻辑。这样,每个组件就可以独立开发、测试和维护。例如,阅读组件里有一个解析章节内容的函数:
export default {
props: ['chapter'],
data() {
return {
content: ''
}
},
async created() {
this.content = await this.fetchChapter(this.chapter.id)
},
methods: {
async fetchChapter(id) {
const res = await axios.get(`/api/chapters/${id}`)
return res.data.content
},
parseContent(content) {
// parse content here...
}
}
}
我使用了Axios来发起HTTP请求,获取后端API返回的数据。然后,在created钩子函数里异步调用fetchChapter函数,将章节内容赋值给content变量。接着,阅读组件会渲染出章节内容,并调用parseContent函数解析章节内容。
为了实现前后端分离,我使用了Vue的Axios插件,可以全局配置Axios的baseURL、timeout和headers等选项:
import axios from 'axios'
axios.defaults.baseURL = '/api'
axios.defaults.timeout = 5000
axios.defaults.headers.common['Authorization'] = 'Bearer ' + localStorage.getItem('token')
这样,每个组件里都可以直接使用this.$axios发起请求,不需要再手动引入和配置Axios。
最后,我使用Vue Router来实现前端路由。在router/index.js文件里定义路由,每个路由对应一个组件:
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import Category from '../views/Category.vue'
import Search from '../views/Search.vue'
import Reader from '../views/Reader.vue'
Vue.use(VueRouter)
const routes = [
{
path: '/',
name: 'Home',
component: Home
},
{
path: '/category',
name: 'Category',
component: Category
},
{
path: '/search',
name: 'Search',
component: Search
},
{
path: '/reader/:book/:chapter',
name: 'Reader',
component: Reader
}
]
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
})
export default router
在组件中使用$router.push(path)方法可以跳转到指定的路由。
综上所述,我使用Vue搭建了一个小说阅读网站,并使用了Vue Router和Vuex实现了路由和状态管理。此外,我还用到了Axios插件来发送HTTP请求,并创建了多个Vue组件,实现了组件化和复用性。Vue框架的高效性和灵活性确实让我深感惊喜。