Vue案例——查询用户

Vue案例——查询用户

一、效果

在这里插入图片描述

使用 Vue.js 框架来构建一个用于查询和排序用户列表的Web应用:

  1. 显示一个用户列表,通过表格的形式呈现,便于用户查看;
  2. 提供一个输入框,允许用户输入关键字来搜索用户;
  3. 当用户在输入框中输入关键字时,用户列表应实时更新,只显示名称包含关键字的用户

二、整体分析

1、逻辑说明

搜索功能
当用户在搜索框中输入关键字时,keyword的值会更新,进而触发fillUsers计算属性的重新计算。这会导致视图中的用户列表更新为只包含名称包含关键字的用户。
排序功能
通过改变sortType的值,可以切换排序方式。当sortType为1时,用户列表按年龄升序排列;当sortType为2时,用户列表按年龄降序排列。当sortType为0时,用户列表保持原顺序。

2、代码分析

  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>查询用户</title>
  </head>
  <body>
    <div id="app" class="basic" @click="changeStyle()">
      <h1>查询用戶:</h1>
      <hr />
      <input type="text" name="" placeholder="请输入名字" v-model="keyword" />
      <button @click="sortType=1">年龄升序</button>
      <button @click="sortType=2">年龄降序</button>
      <button @click="sortType=0">原顺序</button>
      <hr />
      <table width="300px" border="1">
        <tr>
          <th>编号</th>
          <th>姓名</th>
          <th>性别</th>
          <th>年龄</th>
        </tr>
        <tr v-for="(user,index) in fillUsers" :key="user.id">
          <th>{{user.id}}</th>
          <th>{{user.name}}</th>
          <th>{{user.sex}}</th>
          <th>{{user.age}}</th>
        </tr>
      </table>
    </div>
  • <div id="app">...</div>:这是Vue应用的主要容器,所有的Vue组件和模板都将在这里被渲染。
  • 两个<input type="text">元素:用于输入两个数字,通过v-model.number与Vue实例中的num1和num2数据属性双向绑定。.number修饰符确保输入的值被解析为数字。
  • <select>元素:用于选择操作符(加、减、乘、除),与Vue实例中的sign数据属性双向绑定。
  • 结果输出: {{num1}}{{sign}}{{num2}}={{result}}
    这是一个简单的模板,用于显示用户输入的两个数字、所选的操作符以及计算结果。
<script type="text/javascript" src="../js/vue.global.js"></script>
    <script>
      // 1.创建app
      const app = Vue.createApp({
        // data: option api
        data: function () {
          return {
            sortType: 0, //0表示原顺序,1表示升序,2表示降序
            keyword: "",
            users: [
              {
                id: 1,
                name: "张三",
                sex: "男",
                age: 21,
              },
              {
                id: 2,
                name: "李四",
                sex: "男",
                age: 22,
              },
              {
                id: 3,
                name: "王五",
                sex: "男",
                age: 19,
              },
              {
                id: 4,
                name: "李思思",
                sex: "女",
                age: 18,
              },
            ],
          };
        },
        computed: {
          fillUsers() {
            let arr = this.users.filter((user) => {
              return user.name.indexOf(this.keyword) > -1;
            });
            if (this.sortType == 1) {
              //升序
              arr.sort(function (u1, u2) {
                return u1.age - u2.age;
              });
            }
            if (this.sortType == 2) {
              //降序
              arr.sort(function (u1, u2) {
                return u2.age - u1.age;
              });
            }
            return arr;
          },
        },
      });
      // 2.挂载app
      app.mount("#app");
    </script>
  • data函数:定义了Vue实例的初始状态。这里有三个属性:num1、num2和sign,它们分别用于存储用户输入的第一个数字、第二个数字和所选的操作符。
    • sortType: 一个整数,用于指示排序类型。0表示不排序(原顺序),1表示升序,2表示降序。
    • keyword: 一个字符串,用于搜索用户姓名。
    • users: 一个数组,包含多个用户对象,每个对象都有id、name、sex和age属性。
  • computed对象:定义了计算属性result。这个属性基于num1、num2和sign的值动态计算。当用户改变输入或选择新的操作符时,result会自动更新。
    • fillUsers: 一个计算属性,它基于users、sortType和keyword的值动态计算。
    • 使用filter方法从users数组中筛选出名称包含keyword的用户。
    • 如果sortType为1,则按年龄升序排序筛选后的数组。
    • 如果sortType为2,则按年龄降序排序筛选后的数组。
    • 返回排序和筛选后的数组。
  • 在result的计算函数中,根据sign的值执行相应的数学运算,并返回结果。 Vue.createApp({...}):创建一个新的Vue应用实例。
  • app.mount("#app"):将Vue应用挂载到id为"app"的DOM元素上。

3、Vue.js与DOM的交互

  • v-model="keyword":在输入框中使用 v-model 指令,使得输入框的值与Vue实例的 keyword 数据属性保持同步。
  • @click="sortType=1"、@click="sortType=2"、@click="sortType=0":在按钮上使用
    @click 事件监听器,当按钮被点击时,会改变Vue实例的 sortType 数据属性的值。
  • v-for="(user,index) in fillUsers":在表格行中使用 v-for 指令来遍历 fillUsers计算属性返回的用户数组,并为每个用户创建一个表格行。
  • :key="user.id":为 v-for 循环中的每个元素提供一个唯一的键,有助于Vue更高效地更新DOM。
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面我来为您介绍一下如何使用vue-router实现用户登录注册功能。 首先,我们需要安装vue-router,可以通过以下命令进行安装: ``` npm install vue-router --save ``` 然后,在main.js中引入并使用vue-router: ``` import VueRouter from 'vue-router' Vue.use(VueRouter) ``` 接下来,我们新建一个router.js文件,用于配置路由。在该文件中,我们需要定义路由路径和路由组件: ``` import Vue from 'vue' import VueRouter from 'vue-router' import Login from './components/Login.vue' import Register from './components/Register.vue' Vue.use(VueRouter) const routes = [ { path: '/login', component: Login }, { path: '/register', component: Register } ] const router = new VueRouter({ routes }) export default router ``` 在上面的代码中,我们定义了两个路由路径:/login和/register,并分别对应了Login和Register两个组件。 接下来,在App.vue中,我们需要使用<router-view>标签来显示路由组件: ``` <template> <div id="app"> <router-view></router-view> </div> </template> ``` 最后,在main.js中引入router.js,并将其挂载到Vue实例中: ``` import Vue from 'vue' import App from './App.vue' import router from './router' Vue.config.productionTip = false new Vue({ router, render: h => h(App), }).$mount('#app') ``` 至此,我们已经完成了基本的路由配置。接下来,我们可以在Login和Register组件中实现具体的登录和注册功能。 在Login组件中,我们可以使用Vue.js提供的v-model指令来绑定表单输入的数据,并在点击登录按钮时向服务器发送请求验证用户名和密码: ``` <template> <div class="login"> <h1>登录</h1> <form> <label>用户名:</label> <input type="text" v-model="username"> <br> <label>密码:</label> <input type="password" v-model="password"> <br> <button @click.prevent="login">登录</button> </form> </div> </template> <script> export default { data() { return { username: '', password: '' } }, methods: { login() { // 向服务器发送请求验证用户名和密码 } } } </script> ``` 而在Register组件中,我们可以使用v-model指令来绑定表单输入的数据,并在点击注册按钮时向服务器发送请求创建新用户: ``` <template> <div class="register"> <h1>注册</h1> <form> <label>用户名:</label> <input type="text" v-model="username"> <br> <label>密码:</label> <input type="password" v-model="password"> <br> <label>确认密码:</label> <input type="password" v-model="confirmPassword"> <br> <button @click.prevent="register">注册</button> </form> </div> </template> <script> export default { data() { return { username: '', password: '', confirmPassword: '' } }, methods: { register() { // 向服务器发送请求创建新用户 } } } </script> ``` 到这里,我们已经完成了一个简单的用户登录注册功能,并使用vue-router实现了路由跳转。当用户访问/login时,会显示Login组件;当用户访问/register时,会显示Register组件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值