我使用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。
答案 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.
”。或者,您需要更复杂的解决方案。