在外部“服务”类中访问Vue。$ router

时间:2019-05-29 13:45:27

标签: vue.js vue-router

我有一个扩展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 :(得分:0)

您需要使用this关键字来访问路由器实例。试试:

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