nuxt知识点

1、nuxt.config.js
  * server: {
      port: '3000',//服务端口号
      host: '0.0.0.0'
    }
  * 全局的配置文件

2、layouts
  * 默认default,自定义组件不会省略index
  * 路由组件标签<nuxt/>
  * layout() {//使用自定义布局组件
      return '组件名'
    }
  * 错误页error,props:['error']

3、pages
  * layout({app, route, store, env, params, query}) {
      return '布局组件'
    }
  * asyncData({app, route, store, env, params, query}) {
    }
  * data()->created()
  * head() {
      return {
        title: '',
        meta: [],
        link: []
      }
    }
  * mounted()

4、plugins
  * Vue.prototype.$插件 = function () {//只能在客户端使用
    }
  * export default function (context, inject) {//只能在服务端使用
      context.app.$插件 = function () {
      }
    }
  * export default function (context, inject) {
      inject('插件', function () {
      })
    }
  * 自定义插件需在nuxt.config.js的plugins:[]中注册
    plugins:[
      '@/plugins/插件',//客户端服务端都能使用
      {src: '@/plugins/插件', mode: 'server'},//只能在服务端使用
      {src: '@/plugins/插件', mode: 'client'},//只能在客户端使用
    ]
  * 使用
    asyncData({app, route, store, env, params, query}) {
      app.$插件()
    }
    mounted() {
      this.$插件()
    }

5、@nuxtjs/axios
  * npm i -S @nuxtjs/axios
  * 在nuxt.config.js中注册
    modules: [
      '@nuxtjs/axios',
    ]
  * 使用
    asyncData({$axios, app, route, store, env, params, query}) {//方式一
      return $axios.$get('').then(res => {
        return {data: res.data}//返回值会和data()返回值合并
      })
    }
    async asyncData({$axios, app, route, store, env, params, query}) {//方式二
      let res = await $axios.$get('')
      return {data: res.data}//返回值会和data()返回值合并
    }
  * 配置nuxt.config.js跨域
    axios: {
      proxy: true,
      prefix: '/api'
    },
    proxy: {
      '/api': {
        target: '请求地址',
        pathRewrite: {'^/api': ''}
      }
    }
  * @nuxtjs/axios配置拦截器
    //plugins新建interceptor.js
    export default ({store, route, redirect, $axios}, inject) => {
      $axios.onRequest(config => {
        return config
      })
      $axios.onResponse(response => {
        return response
      })
      $axios.onError(error => {
      })
    }
    //nuxt.config.js中注册
    plugins: [
      '@/plugins/interceptor'
    ]

6、路由
  * 路由组件
    <NuxtLink to=''></NuxtLink>
    <Nuxt/>(一级路由)或<NuxtChild/>(嵌套路由)相当于<router-view/>
  * 路由生成案例(.nuxt目录下的router.js为生成的路由表)
    目录路径 -> 路由路径
    pages/index.vue -> /
    pages/aaa.vue -> /aaa
    pages/_aaa.vue(组件的name不能以_开头) -> /:aaa
      * 校验动态动态路由
        validate({params}) {
          return true//true:路由存在,false:路由不存在
        }
    pages/aaa/index.vue -> /aaa

7、middleware
  * export default ({store, redirect}) => {
      if (false) {
        redirect('/')
      }
    }
  * 在nuxt.config.js中注册
    router: {//每个路由都将执行此中间件
      middleware: '中间件文件名'
    }
  * 在组件中注册
    middleware: '中间件文件名'//加载此组件时执行此中间件
  * 生命周期
    middleware -> validate -> asyncData

8、store
  * state的值应该始终是function
  * 非index.js默认namespace: true

9、备注
  * nuxt判断客户端还是服务端
    process.client
  * nuxt服务端获取域名信息(协议://主机名.域名:端口号/前缀)
    process.env._AXIOS_BASE_URL_
原文地址:https://www.cnblogs.com/linding/p/14524825.html