vue 中的异步计算

问题描述 投票:0回答:1

这是我的代码。按钮加载不起作用。我试图在调用 api 时然后我想在按钮中显示加载程序,但这里 v-if 也不起作用。当我调用 api 时,它将为 true,但不会再次为 false。我收到错误 enter image description here

   <template>
   <Layout>
    <div class="grid grid-cols-3">
        <div></div>
        <div class="my-20 border-2 rounded-md p-5 bg-white">
            <h5 class="text-center mb-5 text-3xl">Forget password</h5>
            <div class="mb-4">
                <div class="mb-2 font-bold"><label>Email</label></div>
                <input type="email" class="w-full border-2 border-gray-300 rounded-lg p-2 px-4"
                    placeholder="e. g. [email protected]" v-model="email" name="email" />
            </div>
            <div class="mb-3">
                <button type="primary" :onclick="handleSubmit" :disabled="disabled" 
        class="w-full btn-class">
                    <i v-if="loading" class="fa-solid fa-spinner fa-spin mr-2"></i>Send Email
                </button>
            </div>
            <div class="text-center">
                <router-link to="/signin" class="text-blue-500 hover:underline ml-3">
                    Go Back
                </router-link>
            </div>
        </div>
    </div>
  </Layout>
  </template>


  <script setup>

 import { computed, ref, watchEffect } from 'vue';
  import { useAuthStore } from '../store'
  import { Layout } from '../components/Layout';

 const userStore = useAuthStore();
 const loading = computed(() => userStore.loading)

 const email = ref('')
 const disabled = computed(() => !email.value);

const handleSubmit = async () => {
  await userStore.forgetPassword({ email: email.value });
 }

 </script>

我尝试过使用 nextTick() 并计算

vuejs3 loading
1个回答
0
投票

如果我理解正确的话,您只想在单击按钮后添加微调器。然后,在异步函数完成后移除微调器。

恕我直言,加载没有设置回 false。我建议:

const loading = ref(false);

const handleSubmit = async () => {
  loading.value = true;
  try {
    await userStore.forgetPassword({ email: email.value });
  } catch (error) {
    console.error('Error:', error);
  }
  loading.value = false;
}
© www.soinside.com 2019 - 2024. All rights reserved.