• vue全家桶+Koa2开发笔记(5)--nuxt


    1. nuxt项目初始化报错

    • 下面是使用 koa 模板方法初始化一个项目,使用该方法需要将 nuxt 的版本降至1.4.2;
    • 官方 https://zh.nuxtjs.org/guide/installation 还要提供了脚手架工具,可用使用最新的nuxt2.0版本初始化一个项目。
    $ vue init nuxt-community/koa-template <project-name>
    $ cd <project-name>
    $ npm run dev
    <!--
        1. 如果有报错: Plugin/Preset files are not allowed to export objects, only functions
            需要降低nuxt版本至1.4.2 npm uninstall nuxt
            npm install nuxt@1.4.2
            
        2.  升级eslint-plugin-html 
            $ npm i eslint-plugin-html@^3
    -->


    在server文件夹中定义koa2的路由信息,并且在server/index中挂载注册路由信息;
    在layouts文件夹中定义模板文件;在pages文件夹下编辑前端页面;

    2、使用layout模板

    例如在layouts文件夹中设置search模板
    <template>
      <div>
        <nuxt/>
        <my-footer/>
      </div>
    </template>
    
    <script>
    import MyFooter from '../components/Footer.vue'
    
    export default {
      components: {
        MyFooter
      }
    }
    </script>

    这里注意 <nuxt>相当于 vue-router 中的 

    <!-- 对应的组件内容渲染到router-view中 -->
    <router-view></router-view>   

    然后在 page 文件中 引入该模板:

    <script>
    export default {
      layout:'search',
    }
    </script>

    3、自己定义接口并获取接口

    定义接口在koa-router,获取接口数据在page vue中:

    在server/interface/city 文件下,设置接口信息

    const router = require('koa-router')()
    router.prefix('/city')
    router.get('/list', (ctx) => {
        ctx.body = {
            list:['北京','天津']
        }
    })
    module.exports = router

    然后在server/index.js文件下挂载注册:

    const city = require('./interface/city')
    
    app.use(city.routes(), city.allowedMethods())

    以上为服务器端接口设置,接下来是前端页面请求数据:

    <template>
      <div>
          <ul>
              <li v-for="(item,idx) in cities" :key="idx"> {{item}} </li>
          </ul>
      </div>
    </template>
    <script>
    import axios from 'axios'
    export default {
      layout:'search',
      data(){
          return {
              cities:[]
          }
      },
    //   async mounted() { //该方法是前端渲染页面
    //     let cities;
    //     let {status,data} = await axios.get('/city/list');
    //     console.log(data.list); //在浏览器端出现
    //     if(status == 200){
    //         this.cities = data.list
    //     }
    //   },
      async asyncData() { //再render之前  获取异步数据 是服务器端渲染页面
        let cities;
        let {status,data} = await axios.get('http://localhost:3000/city/list');//由于是服务端渲染,需写全路径
        console.log(data.list);//在服务器端出现
        if(status == 200){
             return {
                cities:data.list //return返回data同名数据
             } 
        }
      }
    }
    </script>
    
    <style scoped>
    
    </style>

     4. 引入vuex 框架

    注意引入vuex 使用普通方式的状态树,需要添加 store/index.js 文件,并对外暴露一个 Vuex.Store 实例:

    import Vue from 'vue';
    import Vuex from 'vuex';
    import citys from './modules/city'
    import navbars from './modules/navbar'
    
    Vue.use(Vuex)//安装注册vuex
    
    const store = () => new Vuex.Store({//实例话vuex,并引入两个vuex定义的函数
        modules:{
            citys,
        }
    })
    export default store

    如上所示,需要实例化 vuex再抛出,和之前直接抛出 vuex的不一样。

    5 见文章    Nuxt开发经验分享,让你踩少点坑

     
  • 相关阅读:
    JAVA类型转换
    ASCII码表
    Java运算符的优先级(从高到低)
    Java内各种进制的表示
    java 标识符命名规则
    Java介绍(重要特点)
    多线程
    Mac&iOS之多线程--转自http://geeklu.com/2012/02/thread/
    00002-20180324-数组-列表
    00001-20180324-从列表中获取单个元素
  • 原文地址:https://www.cnblogs.com/xiaozhumaopao/p/10382089.html
Copyright © 2020-2023  润新知