欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

VueAxios, axios 引入, 为什么需要 vue-axios?

程序员文章站 2022-07-04 12:23:07
...

引入 Vue

在 resources/js/app.js 文件中, 以下两种写法都可以引入Vue, 使用其中一种即可:

window.Vue = require('vue'); 
import Vue from 'vue'; 

引入 axios

错误示范

这种写法不支持, 因为 axios 是第三方库, 不是vue的插件

/** 错误写法
 * import axios from 'axios';
 * Vue.use(axios) 
 */

当作插件文档引入

按照Vue的插件文档来写, 更符合 Vue 整体生态环境, vue-axios 是将 axios 集成到 Vue.js 的小包装器,可以像插件一样进行安装:

import VueAxios from 'vue-axios';
import axios from 'axios';
Vue.use(VueAxios, axios);

前端用法:

this.axios.get(api).then((response)=>{
    console.log(response.data);
})

Vue.axios.get(api).then((response)=>{
    console.log(response.data);
}); 

this.$http.get(api).then((response)=>{
    console.log(response.data);
})

可以了解下 vue-axios 的源码, $http, axios 是 axios 在 Vue.prototype 原型中的绑定名称,.

(function () {

/**
 * Install plugin
 * @param Vue
 * @param axios
 */

function plugin(Vue, axios) {

  if (plugin.installed) {
    return
  }
  plugin.installed = true

  if (!axios) {
    console.error('You have to install axios')
    return
  }

  Vue.axios = axios

  Object.defineProperties(Vue.prototype, {

    axios: {
      get() {
        return axios
      }
    },

    $http: {
      get() {
        return axios
      }
    }

  })
}

if (typeof exports == "object") {
  module.exports = plugin
} else if (typeof define == "function" && define.amd) {
  define([], function(){ return plugin })
} else if (window.Vue && window.axios) {
  Vue.use(plugin, window.axios)
}

})();

原型绑定引入

在原型上进行绑定, 直接写原型链, 注册一个$http,和项目其他成员协作的时候就必须注明你注册的变量名称,而使用vue-axios大家就没有歧义, 因此此用法不推荐.

import axios from 'axios';
Vue.prototype.$http = axios; 
// 也可以写成  Vue.prototype.$axios = axios, 调用, this.$axios;

在模版引擎中用法是:

// 为给定 ID 的 user 创建请求: 
this.$http.get('user?id=12345')
    .then(function(response){
		console.log(response);
	})
    .catch(function(error){
		console.log(error);
    }) 

或者这么写

this.$http.get('/user', {
		params: { id: 12345 }
	})
	.then(function(response){
		console.log(response);
	})
	.catch(function(error){
		console.log(error);
	})

实际引入

Laravel 项目中由于 npm install 自动安装了 axios, 并在 resources/js/bootstrap.js 中自动挂载到 window:

window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

实际, 只需要在 resources/js/app.js 文件中把 axios 注册到 Vue 原型中即可, 不需要再次引入.

require('./bootstrap');
window.Vue = require('vue');
Vue.prototype.axios = window.axios;

前端中使用:

this.axios.get(api).then((response)=>{
	return response.data;
})