使用vue2完成todolist

所用到的技术

路由及路由间通信
父子组件之间的通信(全局事件总线,消息订阅与发布)
本地存储(localStorage)

实现的功能

todolist的登录、注册
每个用户都有自己都有的一个
todolist增、删、改

实现思路

由于使用vue2完成的改作品,存储放在本地,没有涉及到数据库。使用vue脚手架搭建vue的框架,设计需要的组件,如下:
在这里插入图片描述
根据组件填充相对应的内容
注册代码实现

<template>
  <!-- // 注册组件 -->
  <!-- 外面大盒子 -->
  <div class="Register-big">
    <!-- 标题 -->
    <div>
      <h2>注册</h2>
    </div>
    <div>
      <form>
        <!-- 账号 -->
        <div>
          <label for="username">账号:</label>
          <el-input
            v-model="username"
            placeholder="请输入用户名"
            id="username"
            style="width: 400px"
          ></el-input>
        </div>
        <!-- 密码 -->
        <div>
          <label for="password">密码:</label>
          <el-input
            placeholder="请输入密码"
            v-model="password"
            show-password
            id="password"
            style="width: 400px"
          ></el-input>
        </div>
      </form>
    </div>
    <div class="fotter">
      <el-button type="primary" round @click="registerCheck">注册</el-button>
      <router-link to="login" class="a">已有账号,去登陆</router-link>
    </div>
  </div>
</template>

<script>
export default {
  name: "Register",
  data() {
    return {
      users: JSON.parse(localStorage.getItem("users")) || [],
      username: "",
      password: "",
    };
  },
  methods: {
    registerCheck() {
      if (this.username.trim() === "" || this.password.trim() === "") {
        alert("输入不能为空");
        return;
      } else {
        // 向本地添加用户
        // let users = JSON.parse(localStorage.getItem("users"));
        let exist = true;
        this.users.forEach((user) => {
          if (this.username == user.username) {
            exist = false;
          }
        });
        if (exist == true) {
          const user = {
            username: this.username,
            password: this.password,
          };
          this.users.unshift(user);
        } else {
          alert("该账号已存在,请切换账号");
        }
        (this.username = ""), (this.password = "");
      }
    },
  },
  watch: {
    users: {
      // 将数组放到本地并开启深度监视
      deep: true,
      handler(value) {
        localStorage.setItem("users", JSON.stringify(value));
        this.$router.replace("/login");
      },
    },
  },
};
</script>


<style>
.Register-big {
  width: 600px;
  margin: 0 auto;
  text-align: center;
  border: 1px solid #ccc;
  border-radius: 10px;
}
.a {
  margin-left: 20px;
}
.fotter {
  margin-top: 20px;
}
</style>

登录代码实现:


<template>
  <!-- // 登录组件 -->
  <!-- 外面大盒子 -->
  <div class="Login-big">
    <!-- 标题 -->
    <div>
      <h2>登录</h2>
    </div>
    <div>
      <form>
        <!-- 账号 -->
        <div>
          <label for="username">账号:</label>
          <el-input
            v-model="username"
            placeholder="请输入内容"
            id="username"
            style="width: 400px"
          ></el-input>
        </div>
        <!-- 密码 -->
        <div>
          <label for="password">密码:</label>
          <el-input
            placeholder="请输入密码"
            v-model="password"
            show-password
            id="password"
            style="width: 400px"
          ></el-input>
        </div>
      </form>
    </div>
    <div class="fotter">
      <router-link
        :to="`./home?username=${username}&password=${password}`"
        class="btns"
        >登录</router-link
      >
      <router-link to="register">去注册</router-link>
    </div>
  </div>
</template>

<script>
export default {
  name: "Login",
  data() {
    return {
      username: "",
      password: "",
    };
  },
  },
};
</script>


<style>
.Login-big {
  width: 600px;
  margin: 0 auto;
  text-align: center;
  border: 1px solid #ccc;
  border-radius: 10px;
}
.btns {
  margin-right: 20px;
}
.fotter {
  margin-top: 20px;
  font-size: 20px;
}
</style>

登录使用路由守卫进行验证
这里展示一部分实现的代码,获取源码可以:
百度网盘链接: https://pan.baidu.com/s/17P-nB8JjZt7mUwoT9zKK-g
提取码: ljhc

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的 Vue3.0 Todolist 示例代码: ```html <template> <div> <h1>Todolist</h1> <form @submit.prevent="addTodo"> <input type="text" v-model="newTodo" placeholder="Add a new todo"> <button>Add</button> </form> <ul> <li v-for="(todo, index) in todos" :key="index"> <input type="checkbox" v-model="todo.completed" @change="toggleTodoStatus(index)"> <span :class="{completed: todo.completed}">{{ todo.text }}</span> <button @click="removeTodo(index)">X</button> </li> </ul> </div> </template> <script> import { reactive } from 'vue'; export default { setup() { const state = reactive({ newTodo: '', todos: [], }); const addTodo = () => { if (state.newTodo.trim() !== '') { state.todos.push({ text: state.newTodo, completed: false }); state.newTodo = ''; } }; const toggleTodoStatus = (index) => { state.todos[index].completed = !state.todos[index].completed; }; const removeTodo = (index) => { state.todos.splice(index, 1); }; return { newTodo: state.newTodo, todos: state.todos, addTodo, toggleTodoStatus, removeTodo, }; }, }; </script> <style> .completed { text-decoration: line-through; } </style> ``` 这是一个基本的 Todolist 组件,使用Vue3.0 的 Composition API 和响应式数据。在模板中,使用了 v-model 指令来双向绑定输入框和数据,使用 v-for 指令来循环渲染列表项。在 setup 函数中,使用了 reactive 函数来创建响应式数据对象,使用了箭头函数来定义组件的方法。在样式中,使用了伪类选择器 :class 来动态添加类名,实现对已完成的任务的样式修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值