Как получить доступ к функции плагина VUE из импортированного модуля

#vue.js #vuejs2 #vue-component

#vue.js #vuejs2 #vue-компонент

Вопрос:

Я разработал плагин для централизации HTTP-вызовов, и мне нужно получить доступ к его функции ( $ap i) из импортированного модуля в компоненте. Следующее работает нормально: плагин (http-transport.js )

 export default {
    install: function (Vue) { ...
    Vue.prototype.$api = (...)
  

main.js

 import HTTPTransport from './http-transport/http-transport'
Vue.use (HTTPTransport);
  

Использование из любого component.vue

  methods: {
    someMethod() {
       this.$api(...)
}}
  

Все вышеперечисленное работает.

Теперь у меня есть компонент SFC, который импортирует модуль component.vue

 import logic from "./LogicService.js";
  

Вопрос: как я могу вызвать $api из функции внутри LogicService.js ?

Реальный случай заключается в том, что LogicService.js импорт DataService.js из которого мне нужно вызвать функцию $ api, но я предполагаю, что решение вопроса решает и это. Большое спасибо! (vue 2.6.11)

Ответ №1:

есть несколько способов сделать это. самый простой способ — просто импортировать vue и вызвать функцию. но в этом случае вы должны добавить функцию плагина как глобальную в vue

например. в http-transport.js

 export default function (Vue) {
  //add global method or property
  Vue.api= function () {
    // some logic ...
    api();
    
  }
  //add an instance method
  Vue.prototype.$api= function () {
    // some logic ...
    api();
  }
}

function api(){
//code goes here
}
  

а затем в ваших файлах js просто импортируйте Vue и вызывайте Vue.api() .

например, в LogicService.js

 import Vue from "vue";
export default function(){
//call api
  Vue.api();
}
  

проблема с этим способом заключается в том, что вы можете получить доступ Vue.api только тогда, когда vue завершит установку (в большинстве случаев это не проблема).

второй способ, которым вы можете это сделать, — написать плагин таким образом

 export default function (Vue) {
  //add global method or property
  Vue.api= function () {
    // some logic ...
    api();
    
  }
  //add an instance method
  Vue.prototype.$api= function () {
    // some logic ...
    api();
  }
}

export function api(){
//code goes here
}
  

теперь плагин фактически независим от vue и может работать сам по себе без vue. например, теперь вы можете сделать это в LogicService.js

 import {api} from './http-transport.js'
api()
  

Комментарии:

1. Отличная помощь, спасибо! Я, наконец, решил преобразовать плагин в обычный модуль js