如何从自定义函数内部调用vue路由器

时间:2018-07-09 22:36:09

标签: javascript vue.js router

我使用VueCLI,并且在方法内部确实有这样的代码:

submitCheck: function () {
function authUser() {
  // returns a promise   
}
function uploadFile() {
  // also returns a promise
}

// ...

if ( error !== null ) {
    EventBus.$emit('showError', error)
} else {
    authUser()
        .then(
            function () {
                return uploadFile();
            })
        .then(
            function (data) {
                EventBus.$emit('loaderStop')
                this.$router.push('/awaiting');
        })
        .catch(function(error) {
            EventBus.$emit('loaderStop')
                console.log(error)
        })
}

我想实现的是路由到/ await,如果所有的诺言都得到解决,但是由于我在匿名函数中使用了它,所以它没有路由器。我确信许多编码器都遇到了这样的问题,需要从函数内部进行路由。怎么做?

Kalreg。

3 个答案:

答案 0 :(得分:2)

有多种处理方法,建议您使用箭头函数,并了解它们与其他函数样式的区别。

要明确: 替换

function (data) {
    EventBus.$emit('loaderStop')
    this.$router.push('/awaiting');
}

使用

data => {
    EventBus.$emit('loaderStop');
    this.$router.push('/awaiting');
}

答案 1 :(得分:1)

您所质疑的背景还不够清楚。如果代码以指数方法执行,则可以使用箭头功能,例如(agrs,...) => {...}。否则,如果不是这种情况,则可以像(function() {}).bind(this)一样使用bind function。或者只是在代码模块中导入$ router。

希望这可以为您提供帮助。

答案 2 :(得分:0)

Sandro和Xhua的答案是完美的。我只想解释一下,为什么会出现错误:

问题是“ this”。它引用父对象。因此,在您的情况下为“ this”。引用authUser对象,而不引用Vue。为您的理解:您可以在authUser对象之外定义"var that = this",然后在其中使用“ that.”。或者,您需要更复杂的解决方案。