nuxt基础一

摘要:
通用组件<exportdefault{data(){return{}};}&lt,.layout搜索{color;}<在页面组件页面中-->exportdefault{layout;}&lt,stylescopedlang=“css”>&书信电报;process.env.NODE _ env:'mt-app':

nuxt项目的文件夹目录

nuxt基础一第1张

1.nuxt-link组件和router-link组件一样

2.pages文件夹中文件名就是路由路径名(无需配置路由路径),是页面组件。

  laouts文件夹,是公共的模板的内容组件,公共的组件<Nuxt />,必须要加

不过在 Nuxt.js 框架中,我们有了新的变化,layouts对应目录中的layouts文件夹,默认pages下的页面走的都是 layouts/default.vue 布局方式,
但是如果自己定义的话,也可以新增新的布局页。其中<nuxt/>可以类似vue中slot插槽的概念,(如果对 slot 插槽不是很明白,
可以看之前的文章 《二十║Vue基础终篇:组件详解+项目说明》的第四节),pages/**.vue中的内容会插在<nuxt/>内。

3.components是普通组件

4.自定义模板组件

在layouts-->新建search.vue, 自定义版本内容

<template>
  <div class="layout-search">
    <h1>layout search</h1>
    <nuxt />
    <footer>layout footer</footer>
  </div>
</template>

<script>
export default {
  data() {
    return {}
  },
}
</script>

<style scoped lang="css">
.layout-search {
  color: red;
}
</style>

在页面组件pages-->新建search.vue(文件名和路由路劲匹配),用layout属性引入模板组件search.vue

<template>
  <div></div>
</template>

<script>
export default {
  layout: 'search',
  data() {
    return {}
  },
}
</script>

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

在浏览器输入路径。http://localhost:3333/search

nuxt基础一第2张

5.关于css全局样式的引入,在nuxt. config.js配置

nuxt基础一第3张

 在nuxt.config.js配置, 配置项官网详情,

CONFIGURATION:  https://www.nuxtjs.cn/api/configuration-build

module.exports={
  
  dev: process.env.NODE_ENV !== 'production',

  // Global page headers: https://go.nuxtjs.dev/config-head
  head: {
    title: 'mt-app',
    htmlAttrs: {
      lang: 'en',
    },
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: '' },
    ],
    link: [{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }],
  },

  // Global CSS: https://go.nuxtjs.dev/config-css
  css: ['element-ui/lib/theme-chalk/index.css','~assets/css/main.css'],

  // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
  plugins: ['@/plugins/element-ui'],

配置 scss

1. 在assets 目录中新建css目录,在css目录中新建 main.scss 文件 main.scss

body: { background: red; }

2. 命令行安装loader yarn add node-sass sass-loader scss-loader -D

3. 在 nuxt.config.js 文件中引入scss文件

css: [ 'element-ui/lib/theme-chalk/index.css', { src: '@/assets/css/main.scss', lang: 'scss' } ],

6. 服务端配置接口异步渲染

新建server-->interface->city.js, 配置路由接口,在index.js引入, 安装npm i koa  koa-router

import Router from 'koa-router'

const router = new Router({
  prefix: '/city',
})

router.get('/list', async (ctx) => {
  ctx.body = {
    list: ['beigjin', '天津'],
  }
})

export default router

新建server-->index.js, 用babel转化成了es6语法了

import Koa from 'koa'
import { Nuxt, Builder } from 'nuxt'
import cityInterface from './interface/city'

async function start() {
  const app = new Koa()
  const host = process.env.HOST || '127.0.0.1'
  const port = process.env.PORT || 3000

  // Import and Set Nuxt.js options
  const config = require('../nuxt.config.js')
  config.dev = !(app.env === 'production')

  // Instantiate nuxt.js
  const nuxt = new Nuxt(config)

  // Build in development
  if (config.dev) {
    const builder = new Builder(nuxt)
    await builder.build()
  }
 //固定写法 app.use(cityInterface.routes()).use(cityInterface.allowedMethods()) app.use(ctx
=> { ctx.status = 200 ctx.respond = false // Mark request as handled for Koa ctx.req.ctx = ctx // This might be useful later on, e.g. in nuxtServerInit or with nuxt-stash nuxt.render(ctx.req, ctx.res) }) app.listen(port, host) console.log('Server listening on ' + host + ':' + port) // eslint-disable-line no-console } start()

在packjson.json的script中修改服务端的路劲,运行npm run dev

 "scripts": {
    "dev": "nodemon server/index.js --exec babel-node",

在浏览器中测试接口,输入:http://localhost:3000/city/list

nuxt基础一第4张

在pages-->search.vue组件中,发送异步请求

1.在mouted发送异步请求,浏览器中有动态数据渲染,页面会展示数据,但是源码没有数据,因为在服务端渲染不执行mouted函数

2.在asyncData发送异步请求,会在服务端渲染数据,但是里头没有this(组件实例的),默认是80端口,数据出来没有闪烁(浏览器渲染会闪烁),因为在服务器短渲染的,源码是有数据的

用return 来保存数据, 服务器端把编译好的内容和数据下发给浏览器端

3.fetch和asyncData的效果一样的,都是服务端渲染的,不过它是commit vuex的状态的,而asyncData是在组件中发送数据请求的

<template>
  <div>
    Page is search
    <ul>
      <li v-for="(item, index) in list" :key="index">{{ item }}</li>
    </ul>
  </div>
</template>

<script>
import axios from 'axios'
export default {
  layout: 'search',
  data() {
    return {
      list: [],
    }
  },

  // async  mounted(){
  //   const {status, data:{list}} = await axios.get("/city/list")
  //   if(status ===200){
  //     this.list = list
  //   }

  // },

  async asyncData() {
    const { status,data: { list },} = await axios.get('http://localhost:3000/city/list')
    if (status === 200) {
      return {
        list
      }
    }  
  },

  //  async fetch() {
  //   const { status,data: { list },} = await axios.get('http://localhost:3000/city/list')
  //   if (status === 200) {
  //     return {
  //       list
  //     }
  //   }  
  // },
}
</script>

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

nuxt基础一第5张

7.nuxt.js项目中vuex的使用,具体用法;https://i.cnblogs.com/posts/edit-done;postId=14416502

store--》index.js

export const state = () => ({
  inis: ['a', 'b']
})

export  const mutations = {
  INCREASE(state, text) {
    state.inis.push(text)
  }
}

export const actions = {
  increase({commit}, text){
    commit('INCREASE', text)
  }
}

store-->city.js

export const state = () => ({
  list: ['a', 'b']
})

export  const mutations = {
  ADD(state, text) {
    state.list.push(text)
  }
}

export const actions = {
  add({commit}, text){
    commit('ADD', text)
  }
}

在组件中使用,并获取数据

<template>
  <div>
    Page is search
    <ul>
      <li v-for="(item, index) in list" :key="index">{{ item }}</li>
    </ul>
  </div>
</template>

<script>
 import { mapState, mapMutations, mapActions } from 'vuex';
// import axios from 'axios'
export default {
  layout: 'search',
  data() {
    return {
      
    }
  },
  computed:{
      //  ...mapState(['list'])
      ...mapState({
        list:(state)=> state.city.list
      })
  },

  methods:{
    // ...mapMutations('city',['ADD'])
    ...mapActions('city',['add']),
 
  }

免责声明:文章转载自《nuxt基础一》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux下的/etc/crontab文件和crontab -e命令区别及Crontab命令详解(转)注解 @Deprecated的使用、说明下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用PL/SQL Developer连接远程数据库

附送PL/SQL Developer11中文版下载地址 1、先到Oracle网站下载Instant Client : http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 根据你的操作系统选择不同的Instant Client版本 下载会是一...

【Python】-NO.98.Note.3.Python -【Python3 解释器、运算符】

1.0.0 Summary Tittle:【Python】-NO.98.Note.3.Python -【Python3 解释器】 Style:Python Series:Python Since:2018-07-08 End:2018-07-08 Total Hours:30+ Degree Of Diffculty:5 Degree Of Mastery...

python产生随机名字

# encoding: utf-8 import random as r a1=['张','金','李','王','赵'] a2=['玉','明','龙','芳','军','玲'] a3=['','立','玲','','国',''] for i in range(15): name=r.choice(a1)+r.choic...

一篇文章带你了解SVG 蒙版(Mask)

SVG蒙版功能可将蒙版应用于SVG形状。蒙版可确定SVG形状的哪些部分可见,以及具有什么透明度。运行效果可以将SVG蒙版视为剪切路径的更高级版本。 一、简单的蒙版 代码解析: 本示例使用ID=mask1定义一个蒙版。 元素内部是一个元素。元素定义了蒙版的形状。 定义了一个使用mask的元素,元素使用CSS style属性mask内部引用mask ID属性。...

Jsp标签字典开发_基于Spring+Hibernate

目录 1. Jsp标签字典开发_基于Spring+Hibernate   1.1. 简述   1.2. 定义DictItem实体   1.3. 定义字典的@interface   1.4. 定义字典缓存类   1.5. 定义tld标签   1.6. 持久层实体使用注解   1.7. 页面调用jsp标签 2. 补充点   2.1. Hibernate设置属性...

pandas的DataFrame与python的dict字典之间的相互转换

一、dict生成DataFrame  1、如果只有一个dict,即一行dataframe数据 # 注:dict的形式必须是如下2种,不然会报错 # 1、dict外面加一层list【】 dict_a = [{'a': 0, 'b': 1, 'c': 2}] # 2、dict内部的数据至少有1个或多个是list形式 # 注:此时dict外面如果加上li...