用vue3写登录注册功能

首先,我们需要创建一个Vue 3项目,并安装所需的依赖。在项目根目录下运行以下命令:

npm install -g @vue/cli
vue create login-register
cd login-register
npm install axios

接下来,我们将编写登录和注册功能。首先,在src目录下创建一个名为components的文件夹,并在其中创建两个文件:Login.vueRegister.vue

  1. Login.vue:
<template>
  <div class="login">
    <h2>登录</h2>
    <form @submit.prevent="handleSubmit">
      <div>
        <label for="username">用户名:</label>
        <input type="text" id="username" v-model="username" />
      </div>
      <div>
        <label for="password">密码:</label>
        <input type="password" id="password" v-model="password" />
      </div>
      <button type="submit">登录</button>
    </form>
  </div>
</template>

<script>
import { ref } from "vue";

export default {
  setup() {
    const username = ref("");
    const password = ref("");

    const handleSubmit = async () => {
      try {
        const response = await axios.post("/api/login", {
          username: username.value,
          password: password.value,
        });
        if (response.data.success) {
          alert("登录成功!");
        } else {
          alert("登录失败,请检查用户名和密码。");
        }
      } catch (error) {
        console.error(error);
      }
    };

    return {
      username,
      password,
      handleSubmit,
    };
  },
};
</script>
  1. Register.vue:
<template>
  <div class="register">
    <h2>注册</h2>
    <form @submit.prevent="handleSubmit">
      <div>
        <label for="username">用户名:</label>
        <input type="text" id="username" v-model="username" />
      </div>
      <div>
        <label for="email">邮箱:</label>
        <input type="email" id="email" v-model="email" />
      </div>
      <div>
        <label for="password">密码:</label>
        <input type="password" id="password" v-model="password" />
      </div>
      <button type="submit">注册</button>
    </form>
  </div>
</template>

<script>
import { ref } from "vue";

export default {
  setup() {
    const username = ref("");
    const email = ref("");
    const password = ref("");

    const handleSubmit = async () => {
      try {
        const response = await axios.post("/api/register", {
          username: username.value,
          email: email.value,
          password: password.value,
        });
        if (response.data.success) {
          alert("注册成功!");
        } else {
          alert("注册失败,请检查输入信息。");
        }
      } catch (error) {
        console.error(error);
      }
    };

    return {
      username,
      email,
      password,
      handleSubmit,
    };
  },
};
</script>

最后,在src/App.vue中引入这两个组件,并添加一个导航栏来切换登录和注册页面:

<template>
  <div id="app">
    <nav>
      <router-link to="/login">登录</router-link> |
      <router-link to="/register">注册</router-link>
    </nav>
    <router-view></router-view>
  </div>
</template>

<script>
import { createApp } from "vue";
import App from "./App.vue";
import Login from "./components/Login.vue";
import Register from "./components/Register.vue";
import router from "./router";

createApp(App).use(router).mount("#app");
</script>

运行npm run serve实现登录注册功能。


在编写代码时,handleSubmit函数被声明为异步(async)的原因是为了处理可能的异步操作。在JavaScript中,异步操作通常涉及到网络请求、文件读写等耗时操作,这些操作不会阻塞主线程,而是会在后台进行。因此,为了确保程序能够继续执行其他任务,我们需要使用异步函数来处理这些操作。

下面是一个示例代码,展示了如何将handleSubmit函数声明为异步:

// 定义一个异步函数 handleSubmit
async function handleSubmit() {
  // 在这里编写异步操作的代码
  // 例如发送网络请求或读取文件

  try {
    // 模拟异步操作,例如发送网络请求
    await fetch('https://api.example.com/data');

    // 处理异步操作的结果
    const response = await response.json();
    console.log(response);

    // 其他处理逻辑...
  } catch (error) {
    // 处理异步操作的错误
    console.error('An error occurred:', error);
  }
}

// 调用 handleSubmit 函数
handleSubmit();

在上面的示例中,我们使用了async关键字来声明handleSubmit函数为异步函数。在函数体内,我们可以使用await关键字来等待异步操作的完成。通过这种方式,我们可以确保在异步操作完成后再执行后续的代码,避免了阻塞主线程的问题。

好的,以下是一个简单的登录注册功能Vue 示例: ```html <template> <div> <div v-if="!isLoggedIn"> <h2>登录</h2> <form @submit.prevent="login"> <label> 用户名: <input type="text" v-model="username" required /> </label> <br /> <label> 密码: <input type="password" v-model="password" required /> </label> <br /> <button type="submit">登录</button> </form> </div> <div v-else> <h2>欢迎回来,{{ username }}!</h2> <button @click="logout">退出登录</button> </div> <hr /> <div v-if="!isLoggedIn"> <h2>注册</h2> <form @submit.prevent="register"> <label> 用户名: <input type="text" v-model="newUsername" required /> </label> <br /> <label> 密码: <input type="password" v-model="newPassword" required /> </label> <br /> <button type="submit">注册</button> </form> </div> </div> </template> <script> export default { data() { return { username: '', password: '', newUsername: '', newPassword: '', isLoggedIn: false }; }, methods: { login() { // 调用后端 API 进行登录验证 // 假设返回结果为 { success: true, username: 'xxx' } const result = { success: true, username: 'xxx' }; if (result.success) { this.isLoggedIn = true; this.username = result.username; // 保存用户信息到本地存储,以便下次自动登录 localStorage.setItem('username', this.username); localStorage.setItem('isLoggedIn', true); } else { alert('登录失败,请检查用户名和密码!'); } }, logout() { // 退出登录,清除本地存储 localStorage.removeItem('username'); localStorage.removeItem('isLoggedIn'); this.isLoggedIn = false; this.username = ''; }, register() { // 调用后端 API 进行用户注册 // 假设返回结果为 { success: true } const result = { success: true }; if (result.success) { alert('注册成功!'); } else { alert('注册失败,请稍后再试!'); } } }, created() { // 页面加载时从本地存储恢复用户信息 const username = localStorage.getItem('username'); const isLoggedIn = localStorage.getItem('isLoggedIn'); if (isLoggedIn && username) { this.isLoggedIn = true; this.username = username; } } }; </script> ``` 这个示例中,我们定义了四个数据属性:`username`、`password`、`newUsername` 和 `newPassword`,分别用于存储用户输入的登录注册信息。同时,我们还定义了一个 `isLoggedIn` 属性,用于标识用户是否已经登录。在页面加载时,我们从本地存储中读取用户信息并进行恢复。 在方法部分,我们定义了三个方法:`login`、`logout` 和 `register`。其中,`login` 方法会调用后端 API 进行登录验证,并根据验证结果来更新页面状态和本地存储。`logout` 方法会清除本地存储中的用户信息,并更新页面状态。`register` 方法会调用后端 API 进行用户注册,根据注册结果给出相应提示。 注意,这里我们只是简单地模拟了后端 API 的调用过程。在实际的应用中,你需要根据自己的实际情况来调用后端 API,比如使用 Axios 或 Fetch 等库来发送异步请求。同时,为了保证用户信息的安全性,你也需要在后端进行相关的安全措施,比如密码加密、防止 SQL 注入等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值