vue表单案例练习:vue表单创建一行数据及删除数据的实现与理解

在这里插入图片描述
==如何使用Vue:
基本结构

目标两个例子:

1.表单数据一行的创建+删除(彻底删除/隐藏双实现)

代码+注释

特色:1:内容提前判断为空的功能,红色字显示,且无法实现创建功能,只有全部符合要求才可以创建用户
2:创建的用户自动追加到最后一行数据
3:所有数据都存储在组件data中,body标签中没有任何数据,即都是从data中动态获取出来的

判断为空效果如下:

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        form{
            width: 500px;
            height: 210px;
            border: 1px solid;
            border-color: red;
        }
        table{
            margin-top: 20px;
            width: 500px;
            border: 1px solid;
            border-color: red;
        }
        tr{
            text-align: center;
        }
    </style>
</head>
<body>
    <!--
        注意:最开始只实现了隐藏功能(也就是display:none),没有彻底删除,后面终于实现了删除功能通过索引
            e.currentTarget.parentElement
              获得点击元素的父级元素
       -->
    <div id="app">
        <form>
            <p>
                <!--v-model代表表单数据绑定,即页面数值变了,后台的数据也就改变了-->
                姓名:<input type="text" placeholder="请输入姓名" v-model="newPerson.name">
            </p>
            <p>
                年龄:<input type="text" value="0" v-model="newPerson.age">
            </p>
            <p>
                性别:<select v-model="newPerson.sex">
                <option >男</option> <!--这里之所以初始化绑定男,是因为后面组件data中定义的,前面写selected无效-->
                <option>女</option>
            </select>
            </p>
            <p>
                手机:<input type="text" placeholder="请输入手机号" v-model="newPerson.tel">
            </p>
            <!--追加span的目的是,点击按钮后显示判断为空的信息,为空则无法创建,符合才可以继续下一步-->
            <button type="button" @click="createPerson">创建新用户</button> &nbsp; <span style="font-size: 12px;color: red;">{{errorMsg}}</span>
        </form>
        <table>
            <tr id="tr1" style="background-color:pink">
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
                <th>手机</th>
                <th>删除</th>
            </tr>
            <tr v-for="person in people">   <!--v-for="person in people"这是遍历people数组的写法,从data中隔行拿出数据显示在table中,person代表一整行数据,people代表属性数组名字-->
                <td>{{person.name}}</td>
                <td>{{person.sex}}</td>
                <td>{{person.age}}</td>
                <td>{{person.tel}}</td>
                <!--上面不写(person,index)也可以直接使用默认index关键字,无法更改index名字,只能用默认的这个-->
                <td><button @click="delPerson(index)">删除</button></td>
            </tr>
        </table>
    </div>
</body>
<script type="text/javascript" src="js/jquery-1.9.0.min.js" ></script>
<script type="text/javascript" src="js/vue.js" ></script>
<script>
    var app = new Vue({
        el:"#app",  // el:element的简写。挂载元素,绑定id为app的html元素
        data:{
            errorMsg:"",
            newPerson:{
                name:"",
                sex:"男",
                age:"",
                tel:""
            },
            people:[{
                name:"张三",
                sex:"男",
                age:"25",
                tel:"145xxxxxx"
            },{
                name:"李四",
                sex:"女",
                age:"15",
                tel:"139xxxxxx"
            },{
                name:"王五",
                sex:"女",
                age:"9",
                tel:"115xxxxxx"
            }]
        },
        methods:{
            //隐藏功能
            /*delete1:function(e){
               e.currentTarget.parentElement.parentElement.style.display="none";
            },*/
            createPerson: function(){
                // 判断元素是否为空
                if (this.newPerson.name == "") { //this代表new出来的Vue对象,也就是app对象
                    this.errorMsg = "用户名不能为空!";
                    return;
                }
                if (this.newPerson.age == "") {
                    this.errorMsg = "用户年龄不能为空!";
                    return;
                }
                if (this.newPerson.tel == "") {
                    this.errorMsg = "用户电话不能为空!";
                    return;
                }
                //console.log(this);
                this.people.push(this.newPerson); //push相当于在最后拼接一行数据的方法
                // 添加完newPerson对象后,重置newPerson对象,清空绑定的数据和提示信息
                this.newPerson = {name: '', age: '', sex: '男',tel:""};
                this.errorMsg = "";
            },
            delPerson: function(index){
                // 删一个数组元素
                this.people.splice(index,1); //splice删除方法,1代表删除几个
            }
        }
    });
</script>
</html>

2.计算商品总价格

特色:1:隔行换色
2:数量为0时不会再减少,即不会出现负数
3:删除某一行总金额钱数也会动态跟着改变
4:初始表没有信息将不会显示表格,且左下方显示:暂无数据…

在这里插入图片描述
添加一个初始判断语句,当属性表格没数据是显示:
在这里插入图片描述

代码+注释

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="js/jquery-3.3.1.min.js" ></script>
    <script type="text/javascript" src="js/vue.js" ></script>
    <style>
        table{
            border: 1px;
            border-color: #d58512;
        }
        tr{
            border-color: #d58512;
            text-align: center;
        }
        /*根据奇偶数进行样式颜色*/
        tr:nth-child(even){
            background-color: #f5f5f5;
        }
        tr:nth-child(odd){
            background-color: pink;
        }
    </style>
</head>
<body>
    <div id="app">
        <!--如果长度为0,table不显示-->
        <table v-if="goods.length>0"  align="center" width="700px" border="1px" style="border-collapse: collapse;" >
            <tr>
                <th>编号</th>
                <th>名称</th>
                <th>单价</th>
                <th>数量</th>
                <th>操作</th>
            </tr>
            <tr v-for="(product,index) in goods">
                <td>{{product.id}}</td>
                <td>{{product.name}}</td>
                <td>{{product.price}}</td>
                <td>
                    <!--附加功能:disabled="product.count==0"是内部属性,为1时按键失效-->
                    <button @click="subtract(index)" :disabled="product.count==0">-</button>
                    {{product.num}}
                    <button @click="add(index)">+</button>
                </td>
                <td>
                    <button @click="del(index)">删除</button>
                </td>
            </tr>
            <tr>
                <td colspan="5" align="center"> <!--colspan="5"指横跨5列-->
                    总金额:{{sum()}}<!--只写sum代表方法名,不会运行结果,必须写sun()带括号的-->
                </td>
            </tr>
        </table>
        <div v-else> <h3>暂无数据......</h3></div><!--当属性数组长度为0时,显示的信息-->
    </div>
</body>

<script>
    var app = new Vue({
        el:"#app",
        data:{
            goods:[{
                id:1,
                name:"锤子",
                price:10,
                num:0
            },{
                id:2,
                name:"毛线",
                price:20,
                num:0
            },{
                id:3,
                name:"铲铲",
                price:15,
                num:0
            }]
        },
        methods:{
            //+法
            subtract:function(index){ //this代表new出来的Vue对象,所以所有伤心个都可以拿到
                if(this.goods[index].num == 0){
                    this.goods[index].num = 0;
                }else{
                    this.goods[index].num--;
                }
            },
            //-法
            add:function(index){
                this.goods[index].num++;
            },
            //删除
            del:function(index){
                //e.currentTarget.parentElement.parentElement.style.display="none";  //隐藏功能
                this.goods.splice(index,1); //splice删除方法,1代表删除几个
            },
            sum: function () {//遍历数组,计算总金额
                var s = 0;
                //单独按键方法里this代表当前行整个数据,外面代表整个vue对象,可以获调用所有属性
                for (var i = 0; i < this.goods.length; i++) {
                    s += this.goods[i].price * this.goods[i].num;
                }
                return s;
            }
        }
    });
</script>
</html>

本人其他相关文章链接

1.《基础篇第1章:vue2简介》包含Vue2知识点、个人总结的使用注意点及碰到的问题总结

2.《基础篇第2章:vue2基础》包含Vue2知识点、个人总结的使用注意点及碰到的问题总结

3.《进阶篇第3章:vue进阶-组件》包含组件、自定义事件、插槽、路由等等扩展知识点

4.《基础篇第4章》:使用vue脚手架创建项目

5.vue2知识点:数据代理

6.vue2知识点:事件处理

7.vue2知识点:列表渲染(包含:v-for、key、取值范围、列表过滤、列表排序、vue监视对象或数组的数据改变原理、总结vue数据监测)

8.vue2知识点:计算属性与监听属性

9.vue2知识点:生命周期(包含:生命周期介绍、生命周期钩子、整体流程图详解)

10.vue2知识点:非单文件组件和单文件组件

11.vue2知识点:组件is属性

12.vue2知识点:组件模板定义

13.vue2知识点:组件的props属性、非props属性、props属性校验

14.vue2知识点:组件自定义事件

15.vue2知识点:组件插槽分发

16.vue2知识点:动态组件

17.vue2知识点:混入

18.vue2知识点:浏览器本地缓存

19.vue2知识点:全局事件总线(GlobalEventBus)

20.vue2知识点:消息订阅与发布

21.vue2知识点:nextTick语法

22.vue2知识点:Vue封装的过度与动画

23.vue2知识点:路由

24.vue2知识点:vm调用待$命令介绍

25.vue组件通信案例练习(包含:父子组件通信及平行组件通信)

26.vue表单案例练习:vue表单创建一行数据及删除数据的实现与理解

27.vue2基础组件通信案例练习:待办事项Todo-list案例练习

28.vue2基础组件通信案例练习:把案例Todo-list改写成本地缓存

29.vue2基础组件通信案例练习:把案例Todo-list改成使用自定义事件

30.vue2基础组件通信案例练习:把案例Todo-list改成使用全局事件总线

31.vue2基础组件通信案例练习:把案例Todo-list改成使用消息订阅与发布

32.vue2基础组件通信案例练习:把案例Todo-list新增编辑按钮

33.vue2基础组件通信案例练习:把案例Todo-list改成使用动画与过度

34.学习vue2遇到过的问题及个人总结

  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
第1章 页面特效 1.1 HTML页面反向显示 1.2 页面自动最大化 1.3 页面自动刷新 1.4 页面的后退、刷新、前进 1.5保护网页源代码 1.6 保护自己的网页不被放入框架 1.7 保护自己的网页不被放入框架 1.8 打印页面的出错原因 1.9 当前网页调用其他网页 1.10 倒计时载入页面 1.11 定义网页的关键字 1.12 进入页面同时弹出欢迎对话框 1.13 禁止网页另存 1.14 禁止页面加入缓存 1.15 离开页面时弹出对话框 1.16 判断页面是否添加了W3C声明 1.17 屏蔽网页中的脚本 1.18 以频道模式打开页面 1.19 自动识别网页类型 1.20 在网页中动态添加Script脚本 1.21 用JavaScript随机修改页面的标题 1.22 判断网页加载完毕 1.23 嵌入网页的播放器 1.24 设置指定网页为主页 1.25 使用JavaScript传递页面参数 1.26 页面被冻结 第 2章 按钮特效 2.1 页面刷新按钮 2.2 按回车调用登录按钮 2.3 动态创建按钮 2.3 平面按钮 2.4 按钮的嵌入效果 2.5 按钮改变状态栏信息 2.6 定义按钮的热键 2.7 取得控件的绝对位置 2.8 删除时的确认提 示 2.9 按钮只能单击一次 2.10 防止按钮连击 2.11 图片式按钮 2.12 文字显示在按钮底部 2.13 选择不同的列表项就显示不同的按钮 2.14 使用按钮控制文本渐变 2.15 翻页效果的公告栏 2.16 动态设置控件的事件 第3章 字符串文本和输入框特效 3.1 只带下划线的输入框 3.2 限定文本框可输入字符数 3.3 文字过长的省略号 3.4 输出26个英文字母 3.5 首字母变为大写 3.6 textarea自适应文字行数 3.7 禁止文本框的拷贝和粘贴 3.8 控制两个文本框只输其一 3.9 判断编辑器中是否包含特殊字符 3.10 判断文本中回车的数量 3.11 判断字符串中有多少汉字 3.12 去除字符串的前后空格 3.13 刷新时清空所有文本框 3.14 随意改变大小的文本框 3.15 文本框的自动全选 3.16 文本框滚动导航 3.17 按钮获取焦点 3.18 文本框获取焦点弹出下拉框 3.19 文本框简单的单击效果 3.20 文字的打字效果 3.21 文字滚动 3.22 文字滑动 3.23 文字跳动特效 3.24 荧光效果的文本 3.25 文字逐个闪亮-霓虹灯效果 3.26 旋转式的变色文字特效 3.27 黑客帝国中的字符下落效果 3.28 获取表单中文本框的个数 3.29 光标停在文字最后 3.30 分行取textarea中的值 3.31 自动插入文本 3.32 选取textarea的指定行 3.33 文本放大镜 3.34 文本框的默认输入法 3.35 文本框显示网页中选中的内容 3.36 文字的垂直滚动 3.37 文字幻灯片 3.38 随机动态文字效果 3.39 实现textarea的自动滚动 3.40 使用marquee实现文字上下滚动 3.41 类似安装效果的textarea滚动 3.42 始终显示在最顶端的文本 3.43 JavaScript过滤SQL注入字符 3.44 textarea内实现行的翻页效果 3.45 textarea中的文本插入 3.46 查找两段文本中相同的词句 3.47 自动保存网页输出的文本 3.48 文本编辑器 第4章 鼠标特效 4.1 禁用鼠标右键 4.2 使鼠标滚轮失效 4.3 状态栏显示鼠标位置 4.4 点击鼠标右键到指定页 4.5 鼠标放到图片上会显示另外一张图片 4.6 鼠标形状定义大全 4.7 鼠标移入移出时颜色变化 4.8 跟随鼠标的文字 4.9 跟随鼠标的彩色文字 4.10 跟随鼠标的魔法文字 4.11 跟随鼠标的星星 4.12 跟随鼠标的旋转背景 4.13 图片跟随鼠标 4.14 围绕鼠标的文本 4.15 鼠标旁边的提示信息 4.16 鼠标移到下拉框时自动全部打开 4.17 checkbox鼠标移入移出的特效 第5章 层和框架的特效 5.1 div层提示效果 5.2 层自动滚动到最底端 5.3 div的自动滚动 5.4 div的折迭效果 5.5 圆角div 5.6 动态添加iframe框架 5.7 用层实现长文章分页 5.8 iframe自适应高度 5.9 类似MSN的消息提示 5.10 只打印iframe的内容 第6章 下拉列表特效 6.1 下拉框实现多选 6.2 实现两个select的同步 6.3 被选中的列表项下次不能再选 6.4 不带滚动条的select 6.5 从一个下拉列表往另一个下拉列表添加内容 6.6 改变列表项的上下顺序
机器学习是一种人工智能(AI)的子领域,致力于研究如何利用数据和算法让计算机系统具备学习能力,从而能够自动地完成特定任务或者改进自身性能。机器学习的核心思想是让计算机系统通过学习数据中的模式和规律来实现目标,而不需要显式地编程。 机器学习应用非常广泛,包括但不限于以下领域: 图像识别和计算机视觉: 机器学习在图像识别、目标检测、人脸识别、图像分割等方面有着广泛的应用。例如,通过深度学习技术,可以训练神经网络来识别图像中的对象、人脸或者场景,用于智能监控、自动驾驶、医学影像分析等领域。 自然语言处理: 机器学习在自然语言处理领域有着重要的应用,包括文本分类、情感分析、机器翻译、语音识别等。例如,通过深度学习模型,可以训练神经网络来理解和生成自然语言,用于智能客服、智能助手、机器翻译等场景。 推荐系统: 推荐系统利用机器学习算法分析用户的行为和偏好,为用户推荐个性化的产品或服务。例如,电商网站可以利用机器学习算法分析用户的购买历史和浏览行为,向用户推荐感兴趣的商品。 预测和预测分析: 机器学习可以用于预测未来事件的发生概率或者趋势。例如,金融领域可以利用机器学习算法进行股票价格预测、信用评分、欺诈检测等。 医疗诊断和生物信息学: 机器学习在医疗诊断、药物研发、基因组学等领域有着重要的应用。例如,可以利用机器学习算法分析医学影像数据进行疾病诊断,或者利用机器学习算法分析基因数据进行疾病风险预测。 智能交通和物联网: 机器学习可以应用于智能交通系统、智能城市管理和物联网等领域。例如,可以利用机器学习算法分析交通数据优化交通流量,或者利用机器学习算法分析传感器数据监测设备状态。 以上仅是机器学习应用的一部分,随着机器学习技术的不断发展和应用场景的不断拓展,机器学习在各个领域都有着重要的应用价值,并且正在改变我们的生活和工作方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘大猫.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值