从零开始摸索VUE,配合Golang搭建导航网站(十三.Vue cli axios 简单使用)

805 阅读1分钟

「这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战

前言

之前我再开发jQuery项目的时候使用的Ajax请求后端接口,在Vue时代有一个同样的东西用来请求后端接口,它就是axios,那怎么在Vue cli 项目中使用axios呢?

安装

直接在项目根目录使用npm intall安装:

npm install axios

全局导入

在Vue 项目中main.js里添加四行代码导入,全局就可以使用了:

import axios from 'axios'
Vue.prototype.$axios = axios
axios.defaults.baseURL = '/api'  //关键代码
axios.defaults.headers.post['Content-Type']='application/json';

在Vue官网上讲了添加实例使用property方法:

Vue.prototype.$appName = 'My App'

这样的话就可以在页面引入VUe对象的时候使用this.$appName使用这个引入的对象了,还是比较好理解的。 image.png

全局设置跨域代理

在项目根目录新建vue.config.js,输入一下内容,拦截API的请求,不然会跨域报错:


module.exports = {
    devServer: {
      proxy: {
        '/api': {
            target: 'http://127.0.0.1:8080',
          changeOrigin: true, // 允许跨域
          pathRewrite: { // 重写路径
            '^/api': ''
          }
        }
      }
    }
  }
  

module.exports 返回的是模块对象本身, 需要new对象之后才可以调用,这里是把这个文件的内容做一个json对象暴露给框架使用,这个框架会读取里面的键值对
把'/api'路径的请求都转发给后端本地后端服务

测试使用

在App.vue中修改script标签的内容:

<script>
export default {
  name: "App",
  components: {},
  data() {
    //渲染数据后期采用api动态请求的方式
    return {
      // 假的数据列表
      jump_items: [
        { name: "情报处1", url: "http://www.baidu.com" },
        { name: "情报处2", url: "http://www.baidu.com" },
        { name: "情报处3", url: "http://www.baidu.com" },
        { name: "情报处4", url: "http://www.baidu.com" },
        { name: "情报处5", url: "http://www.baidu.com" },
        { name: "情报处6", url: "http://www.baidu.com" },
      ],
      //这里后期通过一些
      url_lists: [],
    };
  },
  created() {
    this.listUlr();
  },

  methods: {
    listUlr() {
      this.$axios.get("/api").then((res) => {
        this.url_lists = res.data.data;
      });
    },
  },
};
</script>

Vue实例有很多生命周期。created方法叫做这个生命周期钩子函数,我在这个函数中调用的数据请求的请求方法,很多面试题会考这个生命周期,会讨论页面初始化请求渲染的时候应该写在created函数还是mounted函数,大部分是created,created是Vue组件还没有替换到网页dom上的时候,mounted是Vue组件已经替换到dom上去了。
在修改html中的内容,主要是修改成后端的一些字段名:

      <div id="only_menu">
        <!-- 坐侧大菜单按钮,用于右侧菜单滑动到指定位置 -->
        <ul id="menu_list">
          <li v-for="item in url_lists" :key="item.ID">
            <div>{{ item.Name }}</div>
          </li>
        </ul>
      </div>
    </div>
    <div id="part_right">
      <!-- 右侧网站导航栏 -->
      <ul id="url_list">
        <li v-for="item in url_lists" :key="item.ID">
          <!-- v:for嵌套循环,循环里面就不能用id定位元素了,要用class -->
          <div class="one_part">
            <div class="menu_target">{{ item.Name }}</div>
            <div class="url_list_data">
              <li v-for="url_data in item.UrlLists" :key="url_data.ID">
                <a :href="url_data.URL">{{ url_data.Name }}</a>
              </li>
            </div>
          </div>
        </li>
      </ul>
    </div>

然后稍微修改一下后端的请求路径,改为API:

image.png

测试&总结

访问localhost:8081看看效果:

image.png 数据成功渲染,很棒。基础功能已经完成了,设置一下环境变量和后端跨域设置。