vue入门:用户管理demo

该demo纯前端实现

  • 使用到vue技术点:

    • 1.在该demo中使用到的vue指令:{{}}v-ifv-model@click v-for
    • 2.在该demo中使用到的事件修饰符: .prevent(阻止事件默认行为)
    • 3.在该demo中使用到的api:
    • arr.push(item,...):向数组末尾添加一个或多个元素
    • arr.splice(index,num) :删除并插入,删除指定索引和数量的元素,并添加新元素,参数1必须,参数2不给则清空数组,参数3不给则不添加新元素
    • arr.findIndex((item,index) => {}):查询符合条件的元素索引,符合条件时返回索引值,不满足条件时返回 -1
    • arr.filter((item,index) => {}):查询符合条件的元素数组,符合条件时返回元素数组,不满足条件时返回空数组
    • arr.forEach((item,index) => {}):遍历数组
    • str.includes(s):字符串中是否包含子字符串
    • str.indexOf(s):子字符串在字符串中首次出现的位置,区分大小写,不匹配时返回-1
    • str.padStart(length,value):头部补全,参数1:补全后生效的长度,参数2:用来补全的字符串
    • 4.在该demo中定义了全局过滤器:Vue.filter(过滤器名称,function(){});
    • 5.在该demo中使用了键盘修饰符:@keyup.enter
  • 实例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户管理demo</title>

    <script src="./js/vue-2.4.0.js"></script>
    <link rel="stylesheet" href="./css/bootstrap-4.3.1.css">

    <style>
        body{
            font-size: 14px;
        }
    </style>
</head>
<body>

    <div id = "app">

        <!-- 提示信息 -->
        <!-- 当提示信息不为空且昵称为空时,则显示 -->
        <div class="alert alert-danger mt-2" v-if = "errMsg != '' && nickname === ''">
            <span>{{ errMsg }}</span>
            <!-- 把提示信息置为空,则不显示 -->
            <button type="button" class="close" @click = "errMsg = ''">
                <span aria-hidden="true">&times;</span>
            </button>
        </div>

      <!-- 添加用户 -->
        <form class="form-inline mb-2 mt-2">
            <div class="form-group ml-2">
                <label>昵称:</label>
                <!-- 回车添加 -->
                <input type="text" class="form-control" v-model = "nickname" @keyup.enter = "add">
            </div>
            <div class="form-group ml-2">
                <input type="button" class="btn btn-primary btn-sm" value="添加" @click = "add">
            </div>
            <div class="form-group ml-2">
                <!-- 键入搜索 -->
                <input type="text" class="form-control"  placeholder="search..." v-model = "keyword">

            </div>
        </form>

        <!-- 显示用户列表 -->
        <table class="table table-bordered" >
            <thead>
                <tr>
                    <th>编号</th>
                    <th>昵称</th>
                    <th>日期</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
                <!-- 加入了搜索,这里不再是简单的 item in userInfos -->
                <tr v-for = "item in search(keyword)" :key = "item.id">
                    <td>{{ item.id }}</td>
                    <td>{{ item.nickname }}</td>
                    <!-- 使用过滤器对日期进行格式化 -->
                    <td>{{ item.date | dateFormat }}</td>
                    <td>
                        <!-- .prevent禁止默认行为,如果不加上,vue会报语法错误 -->
                        <a href="javascript:void()" class="btn btn-link btn-sm" @click.prevent = "del(item.id)">删除</a>
                    </td>
                </tr>
            </tbody>
        </table>
    </div>

    <script>

        // 定义日期处理的全局过滤器
        Vue.filter('dateFormat',function(input){

            //es6字符串补全方法
            /*
                str.padStart(length,value) 头部补全
                str.padStart(length,value) 尾部补全
                参数1:补全后生效的长度
                参数2:用来补全的字符串
            */

            var date = new Date(input);
            // 年
            var year = date.getFullYear();
            //月 0-11
            var month = (date.getMonth() + 1).toString().padStart(2,"0");
            //日
            var day = date.getDate().toString().padStart(2,"0");
            //时
            var hour = date.getHours().toString().padStart(2,"0");
            //分
            var minute = date.getMinutes().toString().padStart(2,"0");
            //秒
            var seconds = date.getSeconds().toString().padStart(2,"0");

            // return '${year}-${month}-${day} ${hour}:${minute}:${seconds}';
            return year+"-"+month+"-"+day+" "+hour+":"+minute+":"+seconds;
        });

        var vue = new Vue({
            el :'#app',
            data : {
                nickname : '',
                id : 2,//由于默认了一条用户数据,因此id从2开始
                errMsg : '',//错误信息
                keyword : '',//搜索的关键字
                userInfos:[//用户信息数组
                    {
                        id : '1',
                        nickname : 'macy',
                        date : new Date()

                    }
                ]
            },
            methods:{
                add(){

                    //判断用户输入
                    if (this.nickname === ''){
                        this.errMsg = '昵称不为空!!!';
                        return;
                    }
                    /* 把新增的用户push到数组 */
                    //1.创建用户
                    var newUser = {
                        id : this.id,
                        nickname : this.nickname,
                        date : new Date()
                    };
                    //2.添加到数组
                    this.userInfos.push(newUser);

                    //3.id加1
                    this.id ++ ;

                    //4.清空输入框和提示信息
                    this.errMsg = this.nickname = '';

                },
                del(id){

                    /* 把传进来的id与数组索引挂钩,从数组中剔除*/
                    //1.遍历数组,根据id获取对应的索引
                    /*
                        find() findIndex() filter() 接收3个参数,value(元素),index(索引),arr(被查找的数组)
                        find() 符合条件时返回满足条件的第一个元素,不满足条件时返回undefined
                        findIndex() 符合条件时返回索引值,不满足条件时返回 -1
                        filter() 符合条件时返回元素数组,不满足条件时返回空数组
                    */

                    var i = this.userInfos.findIndex((item,index,arr) => {
                        return id === item.id;
                    });

                    //2.从数组中剔除元素
                    /*
                     splice(index,num) 参数1:删除的元素索引,参数2:删除的元素个数,如果没给定,则删除全部元素
                    */
                    this.userInfos.splice(i,1);

                },
                search(keyword){

                    console.log(keyword);
                    //把关键字统一转小写
                    keyword = keyword.toLowerCase();

                    //判断关键字是否包含在数组的元素中

                    //方式1:forEach

                    /*
                     indexOf() 子字符串在字符串中首次出现的位置,区分大小写,不匹配时返回-1
                    */
                    // var result = [];
                    // this.userInfos.forEach(item => {
                    //     if(item.nickname.toLowerCase().indexOf(keyword) != -1){
                    //         result.push(item);
                    //     }
                    // });
                    // return result;

                    //方式2:filter()
                    /*
                        字符串中是否包含子字符串:incluces()
                    */

                    // //新建一个数组
                    // var result = [];
                    //  result = this.userInfos.filter((item,index,arr) => {
                    //     if(item.nickname.toLowerCase().includes(keyword)){
                    //        return item;
                    //     }

                    // });
                    // return result;

                    //简化
                     return this.userInfos.filter((item,index,arr) => {
                        if(item.nickname.toLowerCase().includes(keyword)){
                           return item;
                        }
                    });

                }
            }
        });
    </script>

</body>
</html>
  • 效果
  • 小结
    • 在该demo中,充分体现了mvvm的思想,即数据与html结构分离,使用vue作为调度的中间件在这两者中进行数据的存储与渲染
    • 使用vue的指令省去了dom节点的操作,由于数据的双向绑定(从m中改变到v,从v中改变到m),则直接从data中获取数据进行操作

原文地址:https://www.cnblogs.com/itmacy/p/11401872.html

时间: 2024-10-10 02:32:18

vue入门:用户管理demo的相关文章

项目构建之maven篇:8.maven发布web工程及基于spring mvc,jetty实现的用户管理demo

web工程目录结构 pom/pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&qu

EasyUI+MVC+EF简单用户管理Demo(问题及解决)

原文:http://www.cnblogs.com/xishuai/p/3635192.html 写在前面 iframe-src EntityFramework版本 connectionStrings View.Action.页面跳转 EasyUI中DataGrid绑定 新增.修改和删除数据 效果图.完整示例Demo下载 后记 关于EasyUI了解差不多,就想结合MVC.EF做一个简单的用户管理Demo,其实没多少东西,但这是小菜我第一次做.主要是熟悉下其中的流程,当然也遇到一些问题,走了很多的

项目构建之maven篇:8.maven公布webproject及基于spring mvc,jetty实现的用户管理demo

webproject文件夹结构 pom/pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.

dwr实现用户管理demo

DWR: Direct Web Remoting 是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样. demo: pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchem

Windows Server 2008 R2入门之用户管理

今天为大家带来的是Windows Server 2008 R2入门之用户管理,以便大家更快的熟悉2008r2工作组中用户.组的创建.删除.日常管理等,接下来我们直接进入正文. 一.用户账户概述: "用户"是计算机的使用者在计算机系统中的身份映射,不同的用户身份拥有不同的权限,每个用户包含一个名称和一个密码: 在Windows中,每个用户帐户有一个唯一的安全标识符(Security Identifier,SID),用户的权限是通过用户的SID记录的.SID的格式如下所示:S-1-5-21

Linux 入门学习之用户管理

Linux入门之用户管理 linux用户进行访问一般需要认证.授权.审计,其中linux提供了很多的相关命令和相关文件来供使用者分层管理. 用户分类 user 按权限划分: 管理员:root uid为0 普通用户: 系统用户:uid:1-499(centos6)  uid:1-999(centos7) 特性:1.用来运行特定进程的一种身份 2.对守护进程获取资源进行分配 3.不需要登录 登录用户:uid:500+(centos6)  uid:1000+(centos7) 用来登录系统的普通用户

基于vue.js的简单用户管理

功能描述:添加.修改.搜索过滤 效果图: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <title>简单用户管理</title> 5 <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"

MongoDB快速入门学习笔记7 MongoDB的用户管理操作

1.修改启动MongoDB时要求用户验证加参数 --auth 即可.现在我们把MongoDB服务删除,再重新添加服务 mongod --dbpath "D:\work\MongoDB\data" --logpath "D:\work\MongoDB\log\mongodb.log" --install --serviceName "MongoDB" --auth 2.创建用户,并使用创建的用户登录打开shell操作界面,默认test数据,再查看所

Linux 基础入门----用户及文件权限管理

用户及文件权限管理 实验介绍 1.Linux 中创建.删除用户,及用户组等操作. 2.Linux 中的文件权限设置. 一.Linux 用户管理 Linux 是一个可以实现多用户登陆的操作系统,比如“李雷”和“韩梅梅”都可以同时登陆同一台主机,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件.但实际上他们的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于 Linux 的 用户管理 和 权限机制 ,不同用户不可以轻易地查看.修改彼此的文件. 下面我们就来学