Javascript 如何从自定义函数内部调用vue路由器
我使用VueCLI,并且在方法中有这样的代码:Javascript 如何从自定义函数内部调用vue路由器,javascript,vue.js,router,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()
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)
})
}
我想实现的是,如果所有承诺都已解决,则路由到/等待,但由于我在匿名函数中使用了此功能,所以它没有路由器。我相信很多程序员都遇到了这样的问题,需要从函数内部进行路由。怎么做
Kalreg.要处理这个问题,我建议您使用箭头函数,并了解它们与其他函数样式的区别 要明确的是: 替换 与
要处理这个问题有多种方法,我建议您使用箭头函数,并了解它们与其他函数样式的区别 要明确的是: 替换 与
你的问题背景不够清楚。如果代码是以指数方法执行的,则可以使用箭头函数,如
(agrs,…=>{…}
。否则,如果不是这样,您可以使用like(function(){}).bind(this)
。或者在代码模块中导入$router
希望这能对您有所帮助。您的问题上下文不够清楚。如果代码是以指数方法执行的,则可以使用箭头函数,如
(agrs,…=>{…}
。否则,如果不是这样,您可以使用like(function(){}).bind(this)
。或者在代码模块中导入$router
希望这能对您有所帮助。Sandro和Xhua的答案非常完美。我只是想解释一下,为什么会出现错误:
问题是“这个”。它引用父对象。因此,在您的示例中,“this.”指的是authUser对象,而不是Vue。为了便于理解,您可以在authUser对象外部定义
“var that=this”
,然后在内部使用“that.
”。或者,您可以选择更复杂的解决方案。Sandro和Xhua的答案非常完美。我只是想解释一下,为什么会出现错误:
问题是“这个”。它引用父对象。因此,在您的示例中,“this.”指的是authUser对象,而不是Vue。为了便于理解,您可以在authUser对象外部定义
“var that=this”
,然后在内部使用“that.
”。或者你选择更复杂的解决方案。这个解决方案实际上对我很有效。我认为胖箭头只是缩短了代码,并没有改变这个的引用。。啊。。人们一生都在学习。这个解决方案实际上对我很有效。我认为胖箭头只是缩短了代码,并没有改变这个的引用。。啊。。人们一生都在学习。这并不完全正确,这个
的价值取决于函数的调用方式,调用不会在这里发生。好吧,但是调用发生在promiseno的“then”函数中,这是定义,当承诺解决时,该函数会被系统调用该
函数内部将是窗口或未定义的。不完全正确,该
的值取决于函数的调用方式,调用不会在此处发生。但是调用发生在promiseno的“then”函数中,这是定义,当承诺解析时,系统将调用该函数<代码>该函数内部将是窗口或未定义的。
function (data) {
EventBus.$emit('loaderStop')
this.$router.push('/awaiting');
}
data => {
EventBus.$emit('loaderStop');
this.$router.push('/awaiting');
}