Доступ к Vue. $ Router внутри внешнего класса "service" - PullRequest
1 голос
/ 29 мая 2019

У меня есть служба, которая расширяет EventEmitter.

services/service/service.js (относительно main.js)

import { EventEmitter } from "events";

class Service extends EventEmitter {}

Внутри класса Service у меня есть следующий метод, который возвращает Promise:

  /**
   * Method to fetch the Active Survey by "surveySlug":
   */
  fetchActiveSurvey(serviceSlug) {
    return new Promise((resolve, reject) => {
      axios.get(`${this.baseURL}/service/${serviceSlug}`, { headers: { Authorization: AuthStr } }).then(response => {
        resolve(response.data);
      }).catch(error => {
        if (error.response && error.response.data.status != 200) {
          Vue.$router.push({ name: 'home'});
        }
      });
    });
  }

У меня также есть обычный routes.js в том же каталоге, что и main.js, который работает нормально.

Сервисы затем устанавливаются как плагины:

import Service from "../services/service/service"; // <= Refrences `service.js`

export default {
  install(Vue) {
    Vue.prototype.$service = Service;
  }
};

Я пробовал следующее:

Vue.$router.push({ name: 'home'});

Vue.prototype.$router.push({ name: 'home'});

Однако, похоже, я обнаружил, что $router не определено.Каков наилучший способ определения маршрутов проталкивания маршрутизатора из этого сервиса?

1 Ответ

0 голосов
/ 29 мая 2019

Для доступа к экземпляру маршрутизатора необходимо использовать ключевое слово this.Попробуйте:

this.$router.push({ name: 'home'});
...