开发者问题收集

vue.js 未捕获的类型错误:this.$emit 不是一个函数

2020-01-04
4117
export default {    
    mounted() {
      setTimeout(function() {
        this.$emit('onLoad')
      }, 4000);
    }
} //views/Load.vue

我想在访问页面4秒后跳转到另一个页面。

<template>
  <div id="app">
    <transition name="fade" mode="out-in">
      <router-view
        @onLoad="changeRoute('login')">
      </router-view>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'app',
  methods: {
    changeRoute (routeName) {
      this.$router.push({ name: routeName })
    }
  }
}
</script> //App.vue

我想通过'$emit'向'App.vue'发送信号,然后跳转到通过路由器连接的页面。

所有路由器都连接正常。

但是出现“Uncaught TypeError: this.$emit is not a function”的错误。

我该怎么办?

1个回答

问题似乎在于 setTimeout 中的函数未绑定到上下文,因此您可以尝试使用箭头函数或 绑定 该函数到外部上下文:

export default {    
    mounted() {
      setTimeout(() => {
        this.$emit('onLoad')
      }, 4000);
    }
}
karliatto
2020-01-04