Laravel 5 vue router.push:TypeError:onComplete不是一个函数

Laravel 5 vue router.push:TypeError:onComplete不是一个函数,laravel-5,vue.js,Laravel 5,Vue.js,多年来,我一直在使用CodeIgniter并试图了解Laravel+VueJS是如何工作的,现在我对VueJS+Laravel还是个新手。无论如何,我得到了一个运行Vue加载层包的测试页面,该测试页面在onClick事件上触发加载覆盖,该事件使用router.push加载新页面。我阅读了文档,其中有两个附加参数,即router.push的onComplete和onAbort,并提出了以下方法。除控制台中出现错误外,所有操作都按预期进行 控制台错误 [vue-router] uncaught er

多年来,我一直在使用CodeIgniter并试图了解Laravel+VueJS是如何工作的,现在我对VueJS+Laravel还是个新手。无论如何,我得到了一个运行Vue加载层包的测试页面,该测试页面在onClick事件上触发加载覆盖,该事件使用router.push加载新页面。我阅读了文档,其中有两个附加参数,即router.push的onComplete和onAbort,并提出了以下方法。除控制台中出现错误外,所有操作都按预期进行

控制台错误

[vue-router] uncaught error during route navigation:
TypeError: onComplete is not a function
转到方法

goTo(routeName) {
    let self = this
    self.$nextTick( function() {

        // Show Vue Loading Layer
        let loader = this.$loading.show({
            loader: 'spinner',
            color: '#e8b30f',
            backgroundColor: '#000',
            opacity: 0.5,
        })

        // Retrieve new page
        self.$router.push(

            // First param : location
            {name: routeName},

            // Second param : onComplete
            setTimeout(() => loader.hide(), 3 * 1000)
        )
    })
}
即使我得到了预期的结果,我仍然想知道为什么控制台上会出现这个错误

第二,有没有更好的方法?我使用setTimeout()的唯一原因是新页面加载太快,无法在未设置setTimeout()的情况下正确显示加载覆盖


谢谢您的帮助或提示。

的第二个参数。push
需要一个函数,您传递的是

setTimeout(() => loader.hide(), 3 * 1000)
返回一个整数,如下所示:

要修复它,可以将其包装到函数中

() => {
  setTimeout(() => loader.hide(), 3 * 1000)
}
因此,您的
goto
方法如下所示

goTo(routeName) {
    let self = this
    self.$nextTick( function() {

        // Show Vue Loading Layer
        let loader = this.$loading.show({
            loader: 'spinner',
            color: '#e8b30f',
            backgroundColor: '#000',
            opacity: 0.5,
        })

        // Retrieve new page
        self.$router.push(

            // First param : location
            {name: routeName},

            // Second param : onComplete
            () => setTimeout(() => loader.hide(), 3 * 1000)
        )
    })
}

伟大的工作完美。我会接受这个答案。然而,我想要的真正目的是用onClick事件触发加载覆盖,然后在加载新页面后隐藏它。有更好的方法吗?再次感谢。@AllieSyadiqin vue路由器的文档很好地说明了这一点