《家庭财务宝典》

NUXT的项目的优点

10次阅读

共计 4008 个字符,预计需要花费 11 分钟才能阅读完成。

NUXT的项目的优点插图

1.NUXT 是什么?

Nuxt.js 简单的说是 Vue.js 的通用框架,最常用的就是用来作 SSR(服务器端渲染)。

首先说下 SSR,最近很热的词,意为 Server Side Rendering(服务端渲染),目的是为了解决单页面应用的 SEO 的问题,对于一般网站影响不大,但是对于论坛类,内容类网站来说是致命的,搜索引擎无法抓取页面相关内容,也就是用户搜不到此网站的相关信息。

SSR 还适用以下场景

  • 1、客户端的网络比较慢
  • 2、客户端运行在老的或者直接没有 JavaScript 引擎上

2.NUXT 为什么?

vue 开发的 SPA(单页应用) 不利于搜索引擎的 SEO 优化。

3.NUXT 适用于:

Nuxt.js 适合作新闻、博客、电影、咨询等需要搜索引擎提供流量的项目。

4.NUXT 优点:

  • 基于 Vue.js
  • 自动代码分层
  • 服务端渲染
  • 强大的路由功能,支持异步数据
  • 静态文件服务
  • ES6/ES7 语法支持
  • 打包和压缩 JS 和 CSS
  • HTML 头部标签管理
  • 本地开发支持热加载
  • 集成 ESLint
  • 支持各种样式预处理器:SASS、LESS、Stylus 等

安装流程

Nuxt.js 团队提供了 vue-cli 的初始化模板。前提安装 vue-cli,安装过的忽略此步

npm install -g vue-cli

完成后在需要创建的目录下执行以下

vue init nuxt/starter <project-name>
cd <project-name>
npm install

依赖安装完成后

npm run dev

打开浏览器 http://localhost:3000

目录结构

完成上面命令后你的目录结构会如下

NUXT的项目的优点插图1

文件的路径建议都采用绝对路径,表格如下

NUXT的项目的优点插图2

例:怎么在 /pages/user/me.vue 引入一个 static 文件夹里的图片

<img src="~static/img/logo.png" alt="Logo"/>

路由

Nuxt.js 根据 pages 目录结构去生成 vue-router 配置,也就是说 pages 目录的结构直接影响路由结构

例 1:

|-- pages
    |-- posts
        |-- index.vue
        |-- welcome.vue
    |-- about.vue
    |-- index.vue

会生成

routes: [
  {
    path: '/posts',
    component: '~pages/posts/index.vue'
  }, {
    path: '/posts/welcome',
    component: '~pages/posts/welcome.vue'
  }, {
    path: '/about',
    component: '~pages/about.vue'
  }, {
    path: '/',
    component: '~pages/index.vue'
  }
]

例 2: 隐藏路由

在文件名前加 _

|-- pages
    |-- _about.vue
    |-- index.vue

会生成:

routes: [
  {
    path: '/',
    component: '~pages/index.vue'
  }
]

配置文件

目录下的 nuxt.config.js 是我们唯一的配置入口,这里不建议修改 .nuxt 目录,除非特殊需求

默认的给力我们三个配置 ·head·css·loading· 分别是头部设置,全局 css,loading 进度条

nuxt.config.js 的全部的配置如下, 点击查看具体例子

  • 1、cache
  • 2、loading
  • 3、router
  • 4、css
  • 5、plugins
  • 6、head

另外还提供了 vuex 等配置,感兴趣可以去 github 和官网。

其他一些配置的引用

安装需要的 loader 后指定 lang 就可以直接使用。

npm i less less-loader --save--dev

//全局 css
  css: [
    {
      src: 'static/less/base.sass',
      lang: 'less'
    }
  ],
  //页面中使用

    <style lang="less" scoped></style>

页面 loading

// 禁用
module.exports = {loading: false}

//颜色条
module.exports = {loading: { color: '#3B8070'}
}

//使用组件
添加一个 loading 组件 (官方示例如下,详情可看官方文档)
引用该组件
module.exports = {loading: '~components/loading.vue'}
///  components/loading.vue

 <template lang="html">
  <div class="loading-page" v-if="loading">
    <p>Loading...</p>
  </div>
</template>

<script>
export default {data: () => ({loading: false}),
  methods: {start () {this.loading = true},
    finish () {this.loading = false}
  }
}
</script>

<style scoped>
.loading-page {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(255, 255, 255, 0.8);
  text-align: center;
  padding-top: 200px;
  font-size: 30px;
  font-family: sans-serif;
}
</style>

使用插件、第三方模块

// 通过 script 标签

 head: {  
     script: [
      {src: 'https://res.wx.qq.com/open/js/jweixin-1.2.0.js'}
    ]
  },

  //plugins 配置,ssr:false 设置只在客户端使用

   plugins: [
    {src: '~plugins/flexible.js', ssr: false}
  ],

//在页面中使用 axios,配置 vendor 使其只打包一次

//页面
<template>
  <h1>{{title}}</h1>
</template>

<script>
import axios from 'axios'

export default {async asyncData ({ params}) {let { data} = await axios.get(`https://my-api/posts/${params.id}`)
    return {title: data.title}
  }
}
</script>

//配置文件

module.exports = {
  build: {vendor: ['axios']
  }
}

使用第三方组件库

在 nuxt 里使用第三方 UI 组件库也非常简单。以 iview 为例

/// 在 plugins 下新建 iview.js

import Vue from 'vue'
import iView from 'iview';

Vue.use(iView);

//// 配置文件引入 css 和 plugin

module.exports = {
  css: [
    {src: 'iview/dist/styles/iview.css'}
  ],
  plugins: [
    {src: '~plugins/iview.js', ssr: false}
  ],

}

asyncData

nuxt 扩展的异步数据方法,对于页面数据,我们一般有页面 data 定义的形式和 vuex 统一管理的形式,可以根据自己的需求选择。

data 定义这里就不赘述了,这里说一下 vuex 统一管理数据的做法。

///page 页面
<template>
  <div class="container">
    <p class="title"> 数据展示!</p>
    <Table :columns="columns1" :data="data1"></Table>
  </div>
</template>

<script>
  import {mapState} from 'vuex'
  import axios from 'axios'

  export default {
    middleware: 'auth',  // 定义页面中间件
    head () {
      return {title: '其他页面'}
    },
    data () {return {}
    },
    async fetch ({store, params}) {let { data} = await axios.get('http://106.14.205.222/article/list?page=1&limit=10&isActive=1')
      console.log(data)
      store.commit('SET_LIST', data.list)
    },
    computed: {
      ...mapState([
        // 映射 this.xxx 为 store.state.xxx
        'columns1',
        'data1'
      ])
    },
  }
</script>




//store  index.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = () => new Vuex.Store({

  state: {
    columns1: [
      {
        title: '标题',
        key: 'title'
      },
      {
        title: '介绍',
        key: 'intro'
      },
      {
        title: '日期',
        key: 'time'
      }
    ],
    data1: [],
    user: 'xu' // 如果为空,则会中间件控制跳转 404
  },
  mutations: {SET_LIST: (state, data) => {state.data1 = data},
  }
})

export default store

你的工作,由 AI 赋能!🔥

还在为文案、脚本卡壳、做视频、写代码、设计图片灵感枯竭而烦恼吗?🤯

板板 AI,你的工作好帮手!

一键生成    各种文案、脚本、图片、视频、代码、报告,轻松应对各种工作 / 营销需求!

现在注册体验,即可获得:

  • 🎁 30 积分基础模型余额
  • 🎁 3 积分高级模型余额
  • 🎁 3 积分绘画余额

还不快来试试?

点击链接,开启你的 AI 创作之旅!>>>https://www.banbanai.cn

板板 AI,让你的工作效果发挥无限可能! 🚀

正文完
关注板板AI免费获得移动AI助手
post-qrcode
 
天天
版权声明:本站原创文章,由 天天 2024-11-18发表,共计4008字。
转载说明:

本文由 天天资讯网 整理发布,转载请注明出处.
版权声明:部分文章内容或图片来源于网络,我们尊重作者的知识产权。如有侵犯,请联系我们在第一时间删除。

文字广告位10/月 文字广告位10/月 文字广告位10/月 文字广告位10/月 文字广告位10/月
文字广告位10/月 文字广告位10/月 文字广告位10/月 文字广告位10/月 文字广告位10/月
文字广告位10/月 文字广告位10/月 文字广告位10/月 文字广告位10/月 文字广告位10/月
文字广告位10/月 文字广告位10/月 文字广告位10/月 文字广告位10/月 文字广告位10/月
文字广告位10/月 文字广告位10/月 文字广告位10/月 文字广告位10/月 文字广告位10/月

温馨提示:请在上面搜索| 查找更多免费资源,如需广告位请联系站长QQ 48704478

《家庭财务宝典》