vue.use 开发插件实例

139 篇文章 1 订阅

 

//  基于axios 封装的http请求插件
const axios = require('axios');

/**
 * 以下这种方式需要调用Vue.use方法 调用的时候调用 this.$fetch, this.$post, this.$axios, this.$put, this.$del 方法
 */
function coverFormData (data) {
  return Object.keys(data).map(key => {
    let value = data[key];
    if (typeof value === 'object') {
      value = JSON.stringify(value);
    }
    return encodeURIComponent(key) + '=' + encodeURIComponent(value);
  })
}
const http = {
  install(Vue, Option) {
    axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
    if (Option) {
      // 超时设置
      axios.defaults.timeout = Option.timeout || 10000;
      // 默认请求地址设置   
      axios.defaults.baseURL = Option.baseURL || "";
      // 头部设置
      if (Option.headers && typeof Option.headers === 'object') {
        for (let key in Option.headers) {
          // TODO 我咋感觉这个没啥用啊
          if (!Option.headers.hasOwnProperty(key)) continue;
          axios.defaults.headers[key] = Option.headers[key];
        }
      }
      // 请求/响应拦截器
      Option.inRequest && axios.interceptors.request.use(Option.inRequest, error => {
          Promise.reject(error);
      });
      Option.inResponse && axios.interceptors.response.use(Option.inResponse, error => {
          Promise.reject(error);
      });
    }
    /**
     * @param  {string} url
     * @param  {object} params={}  参数可以根据需要自行处理
     */
    const fetch = (url, params = {}, config = {}) => {
      const str = coverFormData(params).join('&');
      return new Promise((resolve, reject) => {
        let address = url;
        if (str) {
          address += '?' + str;
        }
        axios.get(address, config).then(res => {
          resolve(res.data);
        }).catch(error => {
          reject(error);
        });
      });
    };

    /**
     * @param  {string} url
     * @param  {object} data={} 参数可以根据需要自行处理
    
     */
    const post = (url, data = {}, config = {}) => {
      let str = coverFormData(data).join('&');
      if (config.headers && config.headers['Content-Type'] && config.headers['Content-Type'].indexOf('application/json') > -1) {
        str = JSON.parse(JSON.stringify(data));
      }
      return new Promise((resolve, reject) => {
        axios.post(url, str, config).then(res => {
          resolve(res.data);
        }).catch(error => {
          reject(error);
        });
      });
    };

    /**
     * @param  {string} url
     * @param  {object} data={} 参数可以根据需要自行处理
     */
    const put = (url, data = {}, config = {}) => {
      const str = coverFormData(data).join('&');
      return new Promise((resolve, reject) => {
        axios.put(url, str, config).then(res => {
          resolve(res.data);
        }).catch(error => {
          reject(error);
        });
      });
    };

    /**
     * @param  {string} url
     * @param  {object} params={}
     */

    const del = (url, config = {}) => {
      const str = coverFormData(config).join('&');
      return new Promise((resolve, reject) => {
        axios.delete(url, str).then(res => {
          resolve(res.data);
        }).catch(error => {
          reject(error);
        });
      });
    };
    const data = { axios, fetch, post, put, del };
    Object.keys(data).map(item => Object.defineProperty(Vue.prototype, '$' + item, { value: data[item] }));
  }
};

export default http;

使用:

 

### 回答1: vue.component和vue.use都是Vue.js中的方法,但是它们的作用不同。 vue.component用于注册全局组件,可以在任何Vue实例中使用。例如: ``` Vue.component('my-component', { // 组件选项 }) ``` 而vue.use用于安装Vue.js插件,可以在Vue实例中使用插件提供的功能。例如: ``` Vue.use(myPlugin) ``` 其中myPlugin是一个Vue.js插件,它需要提供一个install方法。在install方法中,可以注册全局组件、指令、混入等。例如: ``` const myPlugin = { install(Vue, options) { // 注册全局组件 Vue.component('my-component', { // 组件选项 }) // 注册全局指令 Vue.directive('my-directive', { // 指令选项 }) // 注册全局混入 Vue.mixin({ // 混入选项 }) } } ``` 总之,vue.component用于注册全局组件,vue.use用于安装Vue.js插件。 ### 回答2: 在Vue.js框架中,Vue.component和Vue.use都是用于组件注册的方法。但它们之间有一些区别。 Vue.component是Vue.js用于定义全局或局部组件的方法,可以在全局或局部范围内注册一个组件,使之在应用中可以被多个组件使用。它接收两个参数:第一个参数是组件的名字,第二个参数是一个选项对象,如下: ``` Vue.component('my-component', { // 组件选项 }) ``` Vue.useVue.js插件的方法,用于在全局范围内注册Vue插件Vue插件通常是通过一个对象或一个函数暴露出来,该对象或函数要具有一个install方法。使用Vue.use可以安装插件并将该插件自动注册到Vue实例的所有组件中。使用Vue.use时,必须将插件作为参数传递给Vue.use方法,如下: ``` // 引入插件 import MyPlugin from 'path/to/MyPlugin.js' // 安装插件 Vue.use(MyPlugin) ``` 总之,Vue.component和Vue.use都是用于组件注册的方法,但Vue.component用于组件的定义和注册,Vue.use则用于全局插件的注册和安装,二者的用途和效果不同。 ### 回答3: Vue.js是一款非常流行的JavaScript框架,它提供了很多有用的特性和工具来方便我们开发Web应用程序。Vue.js中常用的两个API是vue.component和vue.use。它们都是以插件的形式来扩展Vue.js的功能。虽然它们有一些相似之处,但是也有一些不同之处。本文将从多个方面对它们进行比较,以便更好地理解它们的作用和用法。 1、作用 vue.component的作用是注册一个全局或局部组件。这个组件可以被其他组件或者模板文件引用。我们可以为组件设置属性(prop)和事件(event),并可以在组件中使用响应式的数据。这样可以实现组件的代码重用和灵活性。 vue.use的作用是注册一个Vue.js插件插件是一个包含了一些预置功能的JavaScript对象,可以扩展Vue.js的全局或局部功能。插件一般包含了一些全局的属性、指令、组件以及一些工具方法。使用插件可以方便地扩展Vue.js的功能,而且插件还可以被其他开发者共享和复用。 2、用法 vue.component的用法: 全局注册 Vue.component('component-name', { // options }) 局部注册 new Vue({ // ... components: { 'component-name': { // options } } }) vue.use的用法: Vue.use(plugin) 3、调用方式 vue.component 全局组件可以直接在任何地方使用,局部组件只能在注册组件的实例或其子组件中使用。 vue.use 插件可以在Vue实例之前调用,也可以在Vue实例之后调用。在调用use方法之后,插件会被安装并立即生效。插件通常是全局可用的,可以在Vue的组件中使用。 4、局限性 vue.component 局部注册的组件不可以在父级组件中使用,只能在父级组件的模板中使用。此外,全局组件也有可能会被其他库或者开发者使用同样的名称而冲突。 vue.use 由于插件本质上是一个JavaScript对象,因此插件可以被修改或覆盖。此外,插件还必须暴露一个install方法,否则使用use安装插件时会报错。 总结: vue.component是Vue.js的组件注册方法,用于注册全局或局部的组件,以实现组件的代码复用和灵活性。 vue.useVue.js的插件注册方法,用于注册插件以扩展Vue.js的全局或局部功能,以方便开发开发和复用Vue.js的扩展功能。 两个API虽然有很多相似之处,但是在实际使用中也存在很多不同之处。了解这些差异和各自的用法可以帮助我们更好地使用Vue.js,提高开发效率和质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值