开发者问题收集

Vue 3 - emit 不是一个函数

2022-05-12
4312

我在 Vue 3 Composition API + Vite 中使用 emit 时遇到了一个奇怪的问题。

我想从子组件向父组件进行简单的 emit。

子组件的代码:

<template>
  <div class="main-stats">
    <v-container @click="logInWithSpotify" class="boton-login">
     Iniciar sesión con Spotify
    </v-container>  
  </div>
</template>

<script setup>
const emits = defineEmits(["logInIsCorrect"]);

function logInWithSpotify() {
  emits.logInIsCorrect(true);
}
</script>

子组件的唯一目的是按下按钮并通过名为 logInWithSpotify() 的自定义方法将 emit 调用到父组件

父组件的代码:

<template>
  <v-app>
    <v-main class="main">
      <v-template v-if="userIsLoged">
        <MainStats />
      </v-template>
      <v-template v-else>
        <Login @logInIsCorrect="setLogInIsCorrect" />
      </v-template>
    </v-main>
  </v-app>
</template>

<script setup>
import { ref, defineAsyncComponent } from "vue";
import Login from "./components/Login.vue";
const MainStats = defineAsyncComponent(() => import("./components/MainStats.vue"));

const userIsLoged = ref(false);
function setLogInIsCorrect(value) {
  console.log(value);
  userIsLoged.value = value;
}
</script>

预期的行为是,当按下子组件的按钮时,具有“true”参数的 emit 会到达父组件并将 userIsLogged 变量更改为该“true”。

有趣的是,昨天代码运行正常,今天却不行了。

在控制台上,它显示:

在此处输入图片描述

1个回答

嘿,我正在编辑我的答案:

我觉得问题出在你的 设置

<script setup>
const emits = defineEmits(["logInIsCorrect"]);

function logInWithSpotify() {
  emits.logInIsCorrect(true);
}
</script>

读完这篇简短的博客后: https://www.angularfix.com/2022/03/uncaught-typeerror-emit-is-not-function.html

不会是这样的:

<script setup>
const emits = defineEmits(["logInIsCorrect"]);

function logInWithSpotify(val) {
  emits(logInIsCorrect, val);
}
</script>

然后你将你的 Val 传递给 LoginWithSpotify(true)

Sweet Chilly Philly
2022-05-12