nuxt.js快速入门

nuxtjs目录结构

其目录结构包含了一个项目开发中通用的东西

assets 存放静态资源

componets 存放vue组件,这类组件类似于react中的无状态组件,可复用的用于构建页面内容,但不具有nuxtjs提供的特性

layouts 存放布局组件,但我感觉实际编写代码时作用不大?

middleware 存放中间件,有express或者koa开发经验的话,应该很容易理解

pages 类似于spa中的views文件夹,是整个项目中最重要的内容,值得一提的是,nuxtjs会根据pages的结构自动生成router

plugins 用于存放插件的配置文件,以elementui为例

import Vue from 'vue'
import Element from 'element-ui'
import locale from 'element-ui/lib/locale/lang/en'

Vue.use(Element, { locale })

这里用Vue.use()全局注册了elementui,后面需要按需引入的时候,还得修改

static 存放静态文件,文件夹中的内容会被映射的根目录下,并且不会被webpack编译处理

store 和vuex相关,存放spa单页应用中的vuex配置

nuxt.config.js 是nuxtjs的配置文件,可以配置项目的入口文件,类似于koa中的/bin/www

值得一提的是 ~ 可以代表根目录,不用再编写../../之类繁琐的路径url

nuxt.config.js

export default {
  mode: 'universal',   //选择单页模式还是多页模式
  /*
  ** Headers of the page
  */
//由于项目没有html文件,这里可以直接指定title,以及其他配置
  head: {
    title: process.env.npm_package_name || '',
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: process.env.npm_package_description || '' }
    ],
    link: [
      { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
    ]
  },
  /*
  ** Customize the progress-bar color
  */
  loading: { color: '#fff' },
  /*
  ** Global CSS
  */
  css: [
    'element-ui/lib/theme-chalk/index.css'
  ],//全局引入css文件
  /*
  ** Plugins to load before mounting the App
  */
  plugins: [
    '@/plugins/element-ui'
  ],
  /*
  ** Nuxt.js dev-modules
  */
  buildModules: [
  ],
  /*
  ** Nuxt.js modules
  */
  modules: [
  ],
  /*
  ** Build configuration
  */  /
  build: {
    transpile: [/^element-ui/],
    /*
    ** You can extend webpack config here
    */
    extend (config, ctx) {
    }
  }
}

其实配置文件还是比较通俗易懂的,其他的配置要看文档的api辽

路由

基础路由

是由nuxtjs自动根据pages的结构生成的

动态路由

给vue文件或者文件夹添加_ 即可。对于动态路由可以添加路由校验,如果不满足要求,那么返回错误页面

嵌套路由

在vue文件的同名文件夹中编写vue页面即可

pages/
--| users/
-----| _id.vue
-----| index.vue
--| users.vue

中间件

在middleware文件夹中添加js文件,其将会在下一个页面跳转之前执行,其接收的参数是ctx。

中间件执行流程顺序:

  1. nuxt.config.js
  2. 匹配布局
  3. 匹配页面

也就是说,应该在nuxt.config.js layout或者pages中添加middleware之后,中间件才会被执行

类似于这样

//vue文件中
export default {
  middleware: 'stats'  //中间件名
}

//nuxt.config.js中
module.exports = {
  router: {
    middleware: 'stats'
  }
}

视图

官网的图应该很清晰的展现了nuxtjs视图

创建app.html

可以修改ie的条件表达式等,中小型项目其实没有必要改

//默认模板


  
    {{ HEAD }}
  
  
    {{ APP }}
  



//修改后的模板



  
    {{ HEAD }}
  
  
    {{ APP }}
  

布局

即通过修改layout/default.vue可以修改页面的布局

类似于spa中的app.vue的作用


可以在默认布局中添加header之类的东西

但是如果使用自定义layout,必须在pages中指定



pages

这是nuxtjs中最主要的内容






一些不同于传统vue的特殊项

属性名 描述
asyncData 最重要的一个键, 支持 异步数据处理,另外该方法的第一个参数为当前页面组件的 上下文对象。
fetch asyncData 方法类似,用于在渲染页面之前获取数据填充应用的状态树(store)。不同的是 fetch 方法不会设置组件的数据。详情请参考 关于fetch方法的文档。
head 配置当前页面的 Meta 标签, 详情参考 页面头部配置API。
layout 指定当前页面使用的布局(layouts 根目录下的布局文件)。详情请参考 关于 布局 的文档。
loading 如果设置为false,则阻止页面自动调用this.$nuxt.$loading.finish()this.$nuxt.$loading.start(),您可以手动控制它,请看例子,仅适用于在nuxt.config.js中设置loading的情况下。请参考API配置 loading 文档。
transition 指定页面切换的过渡动效, 详情请参考 页面过渡动效。
scrollToTop 布尔值,默认: false。 用于判定渲染页面前是否需要将当前页面滚动至顶部。这个配置用于 嵌套路由的应用场景。
validate 校验方法用于校验 动态路由的参数。
middleware 指定页面的中间件,中间件会在页面渲染之前被调用, 请参考 路由中间件。

asyncData

这是nuxtjs扩展的方法,其在pages中,其实可以理解为一个特殊的生命周期,在return时,会自动把数据合并到data中,其作用类似于我们在created中利用axios获取到数据后初始化data。并且在服务器端使用nuxtjs时,asyncData可以获得res、req参数,类似express的中间件

区分assets和static

两者的区别主要是,assets中的文件会被webpack编译构建,static中的文件会被挂载到根目录,那么一些seo优化的内容就可以放到static中,方便搜索引擎爬取。而css之类的要放在assets中,方便别名之类的被编译

你可能感兴趣的:(nuxt.js快速入门)