Nuxt基础
NuxtJS介绍
一个基于 Vue.js 生态的第三方开源服务端渲染应用框架
官网: https://zh.nuxtjs
NuxtJS 基本使用
- 创建新的项目
- 已有的Node.js 服务端项目
- 直接把 Nuxt 当作一个中间件集成到 Node Web Server中
- 现有的Vue.js 项目
- 非常熟悉 Nuxt.js
- 至少 10% 的代码改动
初始化 Nuxt.js 应用
// 方式一:
// 安装
npm init -y
// 创建项目
npx create-nuxt-app <项目名>
cd <项目名>
npm run dev
Nuxt.js 会监听 pages 目录中的文件更改,添加新页面时无需重新启动应用程序。
// 方式二:
mkdir <项目名>
cd <项目名>
// package.json
"scripts": {
"dev": "nuxt"
}
npm install --save nuxt
mkdir pages // 创建pages目录
touch index.vue
npm run dev
.nuxt/ 文件夹时 Nuxt 在编译时自动生成的文件
学新的知识点,创建分支:
git init 初始化仓库
git add . 添加到暂存区
git commit -m “” 提交到本地分支
git branch brName 创建分支
git branch 查看分支
git checkout brName 切换分支
git checkout -b brName2 创建并切换分支
路由
基本路由
Nuxt.js 根据 pages 目录结构自动生成Vue-router 模块的路由配置。
自动生成的路由文件 .nuxt/router.js
路由导航
-
a标签: 它会刷新整个页面,不要使用
-
nuxt-link 组件
- <router-link> 一样可以用
-
编程式导航
-
点击按钮跳转
methods: { onClick(){ this.$router.push('/') } }
和 vue-router 的用法完全一样
-
动态路由
无需配置路由,但文件要以 _ 开头,如user文件夹下 _id.vue。 组成的id 为 /user/:id? , 访问时如localhost:3000/user/4
文件中获取 id 的值, {{ $route.params.id }}
嵌套路由
提取出公共的部分,其他的部分嵌套进去。
创建与文件夹同名的文件:
pages/
users/
abc.vue
users.vue // 与文件夹同名
// users.vue 中使用 <nuxt-child /> 作为子路由的出口
// 访问 localhost:3000/users/abc, 会出现父组件嵌套子组件
路由配置
// nuxt.config.js
module.exports = {
router: { // 自定义路由配置
base: "/app", // "/" ---> 'localhost:3000/abc/'
// routes: 路由配置表
extendRoutes(routes, resolve){
routes.push({
name: '',
path: '',
component: resolve(__dirname, 'pages/404.vue'),
})
}
}
}
视图
HTML ——> Layout ——> Page
模板
默认看不到模板,如需要定制,在根目录下创建 app.html, 使用官方模板,再进行修改。
视图布局
可以扩展默认布局,或在layout 目录下创建自定义布局。
// layouts/default.vue
<template>
<div>
<nuxt /> // 用于加载布局中的页面
</div>
</template>
// pages/index.vue
export default {
layout: 'abc' // 默认layouts/default.vue, 可以自己指定布局文件
}
改动布局后,需要重启一下
异步数据
asyncData
可以在设置组件的数据之前能异步获取或处理数据。
npm install axios
// index.vue
export default = {
name: 'Home',
// 当你想要动态页面内容有利于SEO 或者是 提升首屏渲染速度的时候,就在 asyncData中发请求拿数据
async asyncData () {
const res = await axios({
method: 'GET',
url: 'hjttp://localhost:3000/data.json'
})
return res.data
},
// 如果是非异步数据或者普通数据,则正常的初始化到 data 中即可
data() {
return {
title: 'title'
}
}
}
基本用法:
- 它会将 asyncData 返回的数据融合组件 data 方法返回数据一并给组件
- 调用时机: 服务端渲染期间和客户端路由更新之前
- 路由导航的时候,asyncData() 也会被调用
注意事项:
- 只能在页面组件中使用(不能在公共组件中)
- 没有 this, 因为他是组件初始化之前被调用的
上下文对象
asyncData中不能有this,如果需要使用,就用 context代替
async asyncData(context){
// ...
// 获取 this.$route.params.id
const id = context.params.id
}
更多推荐
Nuxt基础
发布评论