如何快速上手Vue框架?

news2024/11/24 11:52:14

编译软件:IntelliJ IDEA 2019.2.4 x64
运行环境:Google浏览器
Vue框架版本:Vue.js v2.7.14


目录

  • 一. 框架是什么?
  • 二. 怎么写一个Vue程序(以IDEA举例)?
  • 三. 什么是声明式渲染?
    • 3.1 声明式
    • 3.2 渲染
  • 四. Vue如何操作标签体(双标签中的内容)?
  • 五. Vue如何操作属性值?
    • 5.1 单向绑定
    • 5.2 双向绑定
  • 六. Vue如何实现条件渲染?
    • 6.1 什么是条件渲染?
    • 6.2 v-if
    • 6.3 v-else
    • 6.4 v-show
    • 6.5 v-if 与v-show的区别
  • 七. Vue如何实现列表渲染?
    • 7.1 简单数组
    • 7.2 对象数值
  • 八. Vue如何实现事件驱动?
  • 九. Vue如何实现取消控件默认行为?
    • 9.1 什么是控件默认行为?
    • 9.2 超链接与表单取消控件默认行为
  • 十. Vue如何实现阻止事件冒泡?
    • 10.1 关于事件修饰符
    • 10.2 什么是事件冒泡?
    • 10.3 如何实现阻止事件冒泡
  • 十一. Vue如何进行属性的侦听
  • 十二. Vue的生命周期
  • 十三. 钩子函数
  • 十四. 综合案例:Vue版动态表格


一. 框架是什么?

任何编程语言在最初的时候都是没有框架的,后来随着在实际开发过程中不断的总结经验积累最佳的解决方案,慢慢地人们发现在很多特定场景的特定问题,总是可以套用固定的解决方案

于是有人把成熟的固定解决方案收集起来,整合在一起,就形成了框架

在使用框架时,我们往往并不会关心框架是如何编程实现,我们只会关心它能不能实现我们想要的代码逻辑,当然,前提是我们需要提前对框架进行声明,即告诉它要做什么,就像用洗衣机洗衣服时需要先放衣服,洗衣液,设置洗涤模式等相应功能参数。

而我们使用Vue框架,就是在其导入了封装的固定的解决方案js文件的基础上进行编程开发。


二. 怎么写一个Vue程序(以IDEA举例)?

步骤:

  1. 在官网上下载Vue框架的js文件
    在这里插入图片描述

  2. 在IDEA上新建工程文件,在其工程目录新建一个js文件夹并创建一个空白的Vue.js文件,将官网上的Vue框架的js代码全选复制粘贴至我们新建的Vue.js上
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 新建一个HelloWorld.html文件,在其上搭建Vue框架

    a. 将Vue.js引入到网页内

    ps:在IDEA里直接将Vue.js拖拽至HelloWorld.html里,自动实现引入

    <script src="vue.js"></script>
    

    b. 在body标签内设置一个区域(Vue要操作的区域)

    //在body里设置一个空的 div 元素,具有 ID“app”
    <body>
    <div id="app"></div>
    </body>
    

    c. 在div标签的下方,创建Script标签并new Vue()对象

    <body>
    <div id="app"></div>
    </body>
    <script>
    	//new Vue()对象
        new Vue({});
    </script>
    

    d. 给Vue对象传递一个js对象(通过{}方式创建的js对象)

    <script>
    new Vue({
    "el":"#app",//指定为#app的目标元素,用于Vue控制(选择控制区域)
    "data":{},//一个空对象,将用于存储此实例的数据模型。
    "methods":{} //一个空对象,将用于定义此实例可能使用的任何自定义方法。 
    );
    </script>
    
  4. 实现功能

    a. 设置数据模型

    //设置数据模型
    "data":{
    "msg":"div的内容"
    },
    

    b. 将Vue对象中的数据模型和网页的标签体做一个绑定关系

    <body>
    <div id="app">
    	<!-- [{msg}}-->插值表达式 --> 绑定数据模型 -->
    	<div>[{msg}}</div>
    </div>
    </body>
    

    c. 这样我们在操作div中的内容的时候,就是转化为操作msg

    在元素上绑定事件:

    <input type="button"value="获得div中的内容"@click="getText"/>
    

    在Vue对象的methods内创建函数

    "methods":{
    //创建自定义函数getText用于获取msg的值,其实是获取div中的文本,以警示框弹出
    "getText":function () {
    	alert(this.msg);
    },
    //创建自定义函数setText用于设置msg的值,实际上修改的是div中的内容
    "setText":function () {
    	this.msg="Vue设置的新值"
    }
    

案例:对div标签体中的内容进行获取或修改

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue_HelloWorld</title>
    <script src="vue.js"></script>
</head>
<body>
<div id="app">
    <div id="div01">{{msg}}</div>
    <input type="button" value="获取div的内容" id="btn01" @click="getText">      <!--    无参函数可以省略(),但有参函数不能省略-->
    <input type="button" value="修改div的内容" id="btn02" @click="setText">
</div>
<script>
    new Vue({
        "el":"#app",//el是选择Vue可操作的区域
        "data":{
          "msg": "这是div的内容"
        }, //设置数据模型
        "methods":{
            "getText":function () {
                alert(this.msg)
            },
            "setText":function () {
                this.msg="这是Vue设置的新值"
            }
        }
    }
    )

</script>

</body>
</html>

在这里插入图片描述
在这里插入图片描述


三. 什么是声明式渲染?

3.1 声明式

声明式是相对于编程式而言的。

  • 声明式告诉框架做什么,具体操作由框架完成
  • 编程式自己编写代码完成具体操作

3.2 渲染

在这里插入图片描述
上图含义解释:

  • 蓝色方框:HTML标签
  • 红色圆形:动态、尚未确定的数据
  • 蓝色圆形:经过程序运算以后,计算得到的具体的,可以直接在页面上显示的数据、
  • 渲染:程序计算动态数据得到具体数据的过程

举例如下:

在这里插入图片描述


四. Vue如何操作标签体(双标签中的内容)?

语法:

插值表达式{{数据模型中的key值)}

代码举例如下:

 <div id="div01">{{msg}}</div>
 "data":{
          "msg": "这是div的内容"
        }

五. Vue如何操作属性值?

5.1 单向绑定

释义:

修改数据模型,html页面同步效果,但是用户修改html属性值,数据模型不会随之改变

语法:

v-bind:原属性名=“数据模型的key值”

可以简写:

:原属性名=“数据模型的key值”

案例:演示单向绑定的效果

<!DOCTYPE html>
<html lang="en" >
<head>
    <meta charset="UTF-8">
    <title>Vue_HelloWorld</title>
    <script src="vue.js"></script>
</head>
<body>
<div id="app">


    <!-- 单向绑定 v-blind   -->
    <input type="text" v-blind:value="username" >
    <br>

    <br>
    <input type="button" value="显示文本框中的内容"  @click="getValue">

</div>
<script>
    new Vue({
            "el":"#app",//el是选择Vue可操作的区域
            "data":{
                "username":"admin"
            },
            "methods":{
                "getValue":function () {
                    alert(this.username)
                }
            }
        }
    )

</script>

</body>
</html>

案例演示结果:

①输入前的变化

在这里插入图片描述

②输入后的变化

在这里插入图片描述

5.2 双向绑定

释义:

修改数据模型,html页面同步效果,用户修改html属性值,数据模型会随之改变

语法:

v-model:原属性名=“数据模型的key值”

可以简写为,如下所示

v-model=“数据模型的key值”

注意:

在input标签中,双向绑定只能修改value,因为客户只能修改value属性,其他的属性用户也修改不了

案例:演示实现双向绑定

<!DOCTYPE html>
<html lang="en" >
<head>
    <meta charset="UTF-8">
    <title>Vue_HelloWorld</title>
    <script src="vue.js"></script>
</head>
<body>
<div id="app">


    <!-- 双向绑定 v-blind   -->
    <input type="text" v-model:value="username" >
    <br>

    <br>
    <input type="button" value="显示文本框中的内容"  @click="getValue">

</div>
<script>
    new Vue({
            "el":"#app",//el是选择Vue可操作的区域
            "data":{
                "username":"admin"
            },
            "methods":{
                "getValue":function () {
                    alert(this.username)
                }
            }
        }
    )

</script>

</body>
</html>

案例演示结果:

①输入前:

在这里插入图片描述

②输入后的变化:

在这里插入图片描述

tips:

v-model.trim="数据模型的key值” 去前后空格


六. Vue如何实现条件渲染?

6.1 什么是条件渲染?

根据Vue对象中,数据属性的值来判断是否对HTML页面内容进行渲染。即控制元素是否显示。

6.2 v-if

用法:

根据表达式的值来决定是否渲染元素或组件,当表达式的值为真时才会渲染,否则不会渲染。

案例:使用v-if在按按钮的同时改变div的内容

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>

        #divs {
            border: 1px solid red;
            width: 100px;
            height: 150px;
        }

    </style>
    <script src="vue.js"></script>
</head>
<body>


<div id="app">
    <div v-if=flag id="divs">这是div的内容</div>
    <input type="button" value="按钮" @click="changeDiv">
</div>
<script>
    new Vue({
      el:"#app",
      data:{
          flag:true
      },
      "methods":{
          "changeDiv":function () {
              this.flag=!this.flag;
          }
      }


    })


</script>

</body>
</html>

案例演示效果:

①变化前

在这里插入图片描述

②变化后

在这里插入图片描述

6.3 v-else

用法:

true不显示,false显示

注意:

不能单独使用,必须要和v-if搭配
v-if和v-else中间不能有多余标签

案例:演出实现二者搭配的效果

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>

        #divs {
            border: 1px solid red;
            width: 100px;
            height: 150px;
        }

    </style>
    <script src="vue.js"></script>
</head>
<body>


<div id="app">
    <div v-if=flag id="divs">这是加了v-if渲染的div</div>
    <div v-else=flag >这是加了v-else渲染的div</div>

    <input type="button" value="按钮" @click="changeDiv">
</div>
<script>
    new Vue({
      el:"#app",
      data:{
          flag:true
      },
      "methods":{
          "changeDiv":function () {
              //按下按钮触发单击事件的瞬间,flag被取反并同时作用于所渲染的标签体
              this.flag=!this.flag;
          }
      }


    })


</script>

</body>
</html>

案例演示效果:

①变化前

在这里插入图片描述

②变化后

在这里插入图片描述

6.4 v-show

用法:

根据表达式的值来决定是否显示元素或组件,当表达式的值为真时会显示,否则会隐藏,但是元素仍然会被渲染到 DOM 中。

案例:演示实现v-show的效果

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>

        #divs {
            border: 1px solid red;
            width: 100px;
            height: 150px;
        }

    </style>
    <script src="vue.js"></script>
</head>
<body>


<div id="app">
<!--    <div v-if=flag id="divs">这是加了v-if渲染的div</div>-->
    <div v-show=flag id="divs">这是加了v-show渲染的div</div>

    <input type="button" value="按钮" @click="changeDiv">

</div>
<script>
    new Vue({
      el:"#app",
      data:{
          flag:true
      },
      "methods":{
          "changeDiv":function () {
            //按下按钮触发单击事件的瞬间,flag被取反并同时作用于所渲染的标签体
              this.flag=!this.flag;
          }
      }
    })


</script>

</body>
</html>

案例实现效果:

①渲染前

在这里插入图片描述

②渲染后

在这里插入图片描述

6.5 v-if 与v-show的区别

使用场景不同

v-if 适用于在条件满足时只渲染一次的情况。
v-show 适用于需要频繁切换显示与隐藏的情况。

why?

因为 v-if 在条件不满足时会从 DOM 中删除元素,而 v-show 则只是通过修改 CSS 样式来隐藏元素,因此 v-show 的性能比 v-if 更好。


七. Vue如何实现列表渲染?

用法:

Vue 的列表渲染可以使用 v-for 指令,它可以遍历数组或对象,并将每个元素渲染出来。

位置:

循环遍历哪个标签,v-for加在哪个标签上

语法:

v-for=" "

7.1 简单数组

案例:在hyml中的无序列表中遍历数据模型中的hobbys并显示在页面中

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.js"></script>
</head>
<body>

<div id="app">

    <ul>
        <li v-for="hobby in hobbys">{{hobby}}</li>
    </ul>
    <input type="button" value="新增" @click="addHobby">
    <input type="button" value="删除" @click="deleteHobby">
</div>
<script>
    new Vue({
        el:"#app",
        data: {
            hobbys:["Java","mysql","写博客","刷视频号"]
        } ,
        methods:{
            //新增一个习惯
            addHobby:function () {
                this.hobbys.push("CODM")
            },
            //删除一个习惯,从后往前删
            deleteHobby:function () {
                this.hobbys.splice(this.hobbys.length-1,1)
            }
        }


    })

</script>


</body>
</html>

在这里插入图片描述

7.2 对象数值

案例:在table标签中将数据模型中的computers对象数组遍历并显示到页面

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.js"></script>
</head>
<body>

<div id="app">

    <table>
        <tr>
            <th>序号</th>
            <th>品牌</th>
            <th>价格</th>
        </tr>
        <tr v-for="computer in computers">
            <td >{{computer.id}}</td>
            <td >{{computer.brand}}</td>
            <td >{{computer.price}}</td>
        </tr>

    </table>



</div>
<script>
    new Vue({
        el:"#app",
        //遍历对象数值
        data: {
            computers:[
                {
                  id:1001,
                  brand:"华为",
                  price: 7800
                }, {
                  id:1002,
                  brand:"联想" ,
                  price:8900
                }, {
                  id:1003,
                  brand:"苹果",
                  price:13000
                }
            ]
        } 


    })

</script>


</body>
</html>

在这里插入图片描述

需要索引的语法:

v-for=“(变量,index) in 数组”

索引index从0开始,可以加数学运算

案例:在刚才的对象数组中加入序号

代码演示如下:

</head>
<body>

<div id="app">

    <table>
        <tr>
            <th>索引</th>
            <th>序号</th>
            <th>品牌</th>
            <th>价格</th>
        </tr>
        <tr v-for="(computer,index) in computers">
            <td>{{index+1}}</td>
            <td >{{computer.id}}</td>
            <td >{{computer.brand}}</td>
            <td >{{computer.price}}</td>
        </tr>

    </table>



</div>
<script>
    new Vue({
        el:"#app",
        //遍历对象数值
        data: {
            computers:[
                {
                  id:1001,
                  brand:"华为",
                  price: 7800
                }, {
                  id:1002,
                  brand:"联想" ,
                  price:8900
                }, {
                  id:1003,
                  brand:"苹果",
                  price:13000
                }
            ]
        }


    })

</script>


</body>
</html>

在这里插入图片描述


八. Vue如何实现事件驱动?

语法:

v-on:事件类型=“函数调用”

案例:实现单击事件和change事件

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.js"></script>
</head>
<body>

<div id="app">
    <!--  单击事件  -->
    <input type="button" value="按钮" v-on:click="clickTest(10,'java')"><br>
    <!--  change事件  -->
    <input type="text" v-on:change="changeTest">

</div>
<script>
    new Vue(
        {
        el:"#app",
        data:{},
        methods:{
                clickTest:function (a,b) {
                    alert("这是vue绑定并测试的单击事件")
                    alert("传入的值:"+a+"\t"+b)
                },
                changeTest:function () {
                    alert("这是vue绑定并测试的change事件")
                }
            }
        }
    )


</script>


</body>
</html>

在这里插入图片描述
在这里插入图片描述

注意:

上述事件驱动的语法可这样简写:

v-on:click=“clickTest” ==> @click="clickTest"

下面的methods里的自定义函数可这样简写(不常用):

 clickTest:function (a,b) {
                    alert("这是vue绑定并测试的单击事件")
                    alert("传入的值:"+a+"\t"+b)
                }
clickTest(){
	alert("点击事件绑定成功")
}

九. Vue如何实现取消控件默认行为?

9.1 什么是控件默认行为?

控件的默认行为指的是:

  • 点击超链接跳转页面
  • 点击表单提交按钮提交表单

9.2 超链接与表单取消控件默认行为

语法

js:event.preventDefault(); //取消控件的默认行为
Vue:@click.prevent=“clickTest” //100%取消

案例:模拟实现超链接与表单取消控件默认行为

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.js"></script>
</head>
<body>

<div id="app">
    <a href="https://www.baidu.com/" @click="clickTest">跳转至百度</a>

    <form  action="helloworld.html" method="get" @submit.prevent="submitTest" >
        <input type="text" name="username">
        <input type="submit" >
    </form>
</div>
<script>
    new Vue({
        el:"#app",
        data:{},
        methods:{
            clickTest:function () {
                //如果你不根让超链接进行跳转
                alert("将要跳转至百度")
                //取消控件的默认行为
                event.preventDefault();

            },
            submitTest:function () {
                //如果你不根让超链接进行跳转
                alert("将要提交表单")
                //取消控件的默认行为
                // event.preventDefault();
            }
        }
    })

</script>


</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


十. Vue如何实现阻止事件冒泡?

10.1 关于事件修饰符

Vue事件修饰符是Vue提供的一种语法糖,用于简化事件处理程序的编写。事件修饰符是在事件后面添加的特殊后缀,用于改变事件的行为。

常见的事件修饰符有以下几种:

  • .stop阻止事件冒泡
  • .prevent阻止默认事件
  • .capture事件捕获阶段触发事件处理程序
  • .self只有在事件的目标元素上触发事件才会触发事件处理程序
  • .once只触发一次事件处理程序
  • .passive告诉浏览器不需要阻止默认事件,以提高性能

10.2 什么是事件冒泡?

指在 HTML 元素嵌套的结构中,当一个事件被触发时,它会从最内层的元素开始,逐层向外传递,直到传递到最外层的元素为止。在这个过程中,如果某个元素绑定了事件处理函数,它就会被调用执行。

例如,当用户在一个按钮上点击鼠标时,click 事件就会被触发,并且会从按钮元素开始沿着层次结构向外传递,直到传递到整个文档的最外层。在传递的过程中,任何绑定了 click 事件的元素都会被调用执行相应的事件处理函数。

10.3 如何实现阻止事件冒泡

语法:

js:event.stopPropagation(); //阻止事件冒泡
vue:@click.stop="div2Test"

案例:模拟实现阻止事件冒泡

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.js"></script>
    <style>
        #div1{
            border: 2px solid red;
            width: 300px;
            height: 300px;
        }
        #div2{
            border: 2px solid blue;
            width: 150px;
            height: 150px;
        }


    </style>
</head>
<body>

<div id="app">
    <div id="div1" @click="div1Test">
        <div id="div2" @click.stop="div2Test"></div>
    </div>

</div>
<script>
    new Vue({
        el:"#app",
        data:{},
        methods:{
            div1Test:function () {
                alert("点击了大红框");
            },
            div2Test:function () {
                //发生了事件冒泡:即点中了小蓝框,小蓝框的单击事件于大红框的单击事件先后触发
                alert("点击了小蓝框");
                //现有需求:点击小蓝框,只触发小蓝框的单击事件
                //js的原生阻止方法
                // event.stopPropagation();
            }
        }


    })

</script>


</body>
</html>

在这里插入图片描述

在这里插入图片描述


十一. Vue如何进行属性的侦听

释义:

属性侦听是指在Vue实例中,监听某个属性的变化,当属性发生变化时,执行相应的操作。

功能:

当数据模型的值放生变化时,被Vue监听到,然后执行一个函数

案例:尊姓和大名后面的文本要随着用户输入的值变化而变化,且全名中的文本也要一起变化

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.js"></script>
</head>
<body>

<div id="app">

<p>尊姓:{{firstname}}</p>
<p>大名:{{lastname}}</p>

<input type="text" v-model="firstname"><br>
<input type="text" v-model="lastname">
    <p>全名:{{fullname}}</p>
</div>
<script>
    new Vue({
        el:"#app",
        data:{
            firstname:"本",
            lastname:"拉登",
            fullname:"本.拉登"
        },
        methods:{},
        watch:{
            firstname: function () {
                this.fullname=this.firstname+"."+this.lastname;
            },
            lastname: function () {
                this.fullname=this.firstname+"."+this.lastname;
            }
        }

    })

</script>

</body>
</html>

在这里插入图片描述

在这里插入图片描述


十二. Vue的生命周期

Vue生命周期详细图解如下:

①官网版

在这里插入图片描述

②中文图解版

在这里插入图片描述

对象的创建前beforeCreate
对象的创建后created
渲染(挂载)前beforeMount
渲染(挂载)后mounted
修改前beforeUpdate
修改后updated
销毁前beforeDestroy
销毁后Destroy


十三. 钩子函数

功能:

让开发者在vue的生命周期阶段执行自定义函数

位置:

和el/data/methods/watch同级别

案例:创建自定义函数模拟演示beforeCreate,created,beforeMount,mounted这四种生命周期的状态

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.js"></script>
</head>
<body>

<div id="app">

    <div id="div01">{{msg}}</div>

</div>
<script>
    new Vue({
        el:"#app",
        data:{
            msg:"这是div中的内容"
        },
        methods:{
            fun01:function () {
                console.log("这是fun01函数");
            }
        },
        beforeCreate:function () {
            console.log("vue对象初始化前执行...");
            console.log(this.msg);//没有
            this.fun01();//报错
        },
        created:function () {
            console.log("vue对象初始化后执行...");
            console.log(this.msg);//有值
            this.fun01();//可以调用到
        },
        beforeMount:function () {
            console.log("vue对象渲染前执行...");
            console.log(document.getElementById("div01").innerText);//{{msg}}
        },
        mounted:function () {
            console.log("vue对象渲染后执行...");
            console.log(document.getElementById("div01").innerText);//这是div中的内容
        }

    })

</script>

</body>
</html>

在这里插入图片描述


十四. 综合案例:Vue版动态表格

案例需求

  • ① 创建一个table,初始化员工的一些信息(编号、姓名、年龄、专业等)

  • ② 创建一个表单,用户输入员工的信息

  • ③ 表单中创建添加按钮,点击添加按钮,输入的员工信息追加到表格内

  • ④ 每条员工信息后都有一个删除的超链接,点击删除,删除当前员工信息

案例图解

在这里插入图片描述
案例代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue实现动态表格</title>
    <script src="vue.js"></script>
</head>
<body>

<div id="app">
    <table border="1" cellspacing="0px" width="250px"  align="center" id="users">
        <tr>
            <th>序号</th>
            <th>用户</th>
            <th>性别</th>
            <th>操作</th>
        </tr>
        <tr v-for="student in students">
            <td>{{student.id}}</td>
            <td>{{student.name}}</td>
            <td>{{student.gender}}</td>
            <td>
                <input type="button" value="删除" @click="deleteUser" >
            </td>
       </tr>
    </table>

    <table border="0" cellspacing="0px" width="250px"  align="center" id="input">
        <tr>
            <td>序号</td>
            <td colspan="3"><input type="text" v-model:value="id" > </td>

        </tr>
        <tr>

            <td>姓名</td>
            <td colspan="3"><input type="text" v-model:value="name" ></td>

        </tr>
        <tr>
            <td>性别</td>
            <td colspan="3"><input type="text" v-model:value="gender" ></td>

        </tr>
        <tr>
            <td colspan="4" align="center">
                <input type="button" value="添加用户"  @click="addUser">
            </td>

        </tr>
    </table>
</div>
<script>
    new Vue({
        el:"#app",
        data:{
            students:[
                {
                    id:1,
                    name:"张三",
                    gender:"男",
                },
                {
                    id:2,
                    name:"李四",
                    gender:"女"
                },
                {
                    id:3,
                    name:"王五",
                    gender:"男"
                }
                ],
            id:"null",
            name:"null",
            gender:"null",
        },
        methods:{
            //删除用户
            deleteUser:function () {
               //event.target.parentNode --> 获取触发单击事件的按钮元素的父元素
                //event.target.parentElement  --> 获取触发单击事件的按钮元素的父元素
                event.target.parentElement.parentElement.remove();

            },

            //思路:将新添加的数据加入到data中students数组中,即可
            addUser:function () {
                var data= new Object();
                data.id=this.id;
                data.name=this.name;
                data.gender=this.gender;
                this.students.push(data);
            }
            
        }

    })



</script>


</body>
</html>

在这里插入图片描述

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417976.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker安装oracle_11g -- 命还长时,自己搞的小玩具!!!

前言: 如果不是嫌命长, 建议不这么玩, 因为装到最后你会很崩溃, 感觉毫无意义, 就是个玩具, 哎~~~就是玩!!! 参考文档 1.https://blog.51cto.com/u_12946336/5722259 2.https://www.muzhuangnet.com/show/118178.html 3.https://blog.csdn.net/qq_42957435/article/details/1…

spring security+jwt实现认证和授权

最近正在研究前后端分离的开发模式&#xff0c;做做小项目练练手&#xff0c;正好用到了spring security的认证和授权&#xff0c;就总结一波。 首先&#xff0c;引入相关的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId&g…

支付系统设计:收银台设计一

文章目录前言1. 收银台前端页面1. 1 收银台的业务场景1. 2 同应用不同支付场景下的收银台2. 商户平台配置管理2.1 配置流程2.2 支付工具列表配置2.3 支付配置2.3 支付银行配置3. 系统处理流程3.1 下单流程3.1 拉起收银台流程总结前言 收银台即用户日常付款前选择支付方式的页面…

革新设计,小巧强大,水库保卫无忧!

水库安全运行事关广大人民群众生命财产安全&#xff0c;为规范水库管理&#xff0c;落实水库预报、预警、预演、预案措施&#xff0c;提升水库信息化管理水平&#xff0c;保障水库安全运行。水库大坝是重要的国民基础设施&#xff0c;承担着防洪抗旱&#xff0c;节流发电的重要…

新规拉开中国生成式AI“百团大战”序幕?

AI将走向何方&#xff1f; ChatGPT在全球范围掀起的AI热潮正在引发越来越多的讨论&#xff0c;AI该如何管理&#xff1f;AI该如何发展&#xff1f;一系列问题都成为人们热议的焦点。此前&#xff0c;马斯克等海外名人就在网络上呼吁OpenAI暂停ChatGPT的模型训练和迭代&#xf…

SGAT丨单基因分析工具SingleGeneAnalysisTool

Single Gene Analysis Tool 简介&#xff1a;SGAT是一个免费开源的单基因分析工具&#xff0c;基于Linux系统实现自动化批量处理&#xff0c;能够快速准确的完成单基因和表型的关联分析&#xff0c;只需要输入基因型和表型原始数据&#xff0c;即可计算出显著关联的SNP位点&…

学习大数据需要什么语言基础

Python易学&#xff0c;人人都可以掌握&#xff0c;如果零基础入门数据开发行业的小伙伴&#xff0c;可以从Python语言入手。 Python语言简单易懂&#xff0c;适合零基础入门&#xff0c;在编程语言排名上升最快&#xff0c;能完成数据挖掘、机器学习、实时计算在内的各种大数…

测试名词介绍

测试名词介绍一&#xff1a;敏捷测试1. 定义&#xff1a;2. 敏捷测试的核心&#xff1a;3. 敏捷测试的8大原则和传统测试的区别二&#xff1a;测试名词介绍瀑布模型回归测试Alpha测试Beta测试性能测试白盒测试黑盒测试灰盒测试三&#xff1a;测试流程单元测试 (unit test)集成测…

Java RSA加解密算法学习

一、前言 1.1 问题思考 为什么需要加密 / 解密&#xff1f;信息泄露可能造成什么影响&#xff1f; 二、 基础回顾 2.1 加密技术 加密技术是最常用的安全保密手段&#xff0c;利用技术手段把重要的数据变为乱码&#xff08;加密&#xff09;传送&#xff0c;到达目的地后再…

nginx的前端部署方式

1. 什么是nginx Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。 由俄罗斯的程序设计师Igor Sysoev所开发&#xff0c;官方测试nginx能够支支撑5万并发链接&#xff0c; 并且cpu、内存等资源消耗却非常低&#xff0…

javascript 数组详解

1.数组是可变的 数组内元素可以是不同的类型&#xff1a; 字符串一旦创建就不可变&#xff0c;但数组是可变的&#xff0c;且操作起来十分随意&#xff0c;例如&#xff1a; 直接修改数组长度&#xff0c;若新赋予长度小于原数组长度&#xff0c;会直接舍弃多余元素: 若新赋予…

【AI绘画】Midjourney和Stable Diffusion教程

之前我向大家介绍了这两个AI绘画网站&#xff1a; Stable Diffusion介绍&#xff1a; https://mp.csdn.net/mp_blog/creation/editor/130059509 Midjourney介绍: https://mp.csdn.net/mp_blog/creation/editor/130003233 前言 这里是新星计划本周最后一篇&#xff0c;主要…

python 连接oracle

前提&#xff0c;navicate成功连接oracle 1、下载cx_oracle,根据python版本下载whl&#xff0c;或者通过 ​pip install cx_Oracle -i http://pypi.douban.com/simple/ 下载地址&#xff1a; cx-Oracle PyPIhttps://pypi.org/project/cx-Oracle/#files2、navicate下instant…

​Auction Design in the Auto-bidding World系列一:面向异质目标函数广告主的拍卖机制设计...

导读&#xff1a; 传统拍卖机制不存在了&#xff01;出价产品智能化成为行业发展趋势&#xff0c;自动出价&#xff08;Auto-bidding&#xff09;已成为互联网广告主营销的主流&#xff0c;经典效用最大化模型&#xff08;Utility Maximizer&#xff09;的假设已经不再能良好地…

使用 LXCFS 文件系统实现容器资源可见性

使用 LXCFS 文件系统实现容器资源可见性一、基本介绍二、LXCFS 安装与使用1.安装 LXCFS 文件系统2.基于 Docker 实现容器资源可见性3.基于 Kubernetes 实现容器资源可见性前言&#xff1a;Linux 利用 Cgroup 实现了对容器资源的限制&#xff0c;但是当在容器内运行 top 命令时就…

《金阁寺》金阁美之于幻想,我用摧毁它来成就其美

《金阁寺》金阁美之于幻想&#xff0c;我用摧毁它来成就其美 三岛由纪夫&#xff08;1925-1970&#xff09;,日本当代小说家、剧作家、记者、电影制作人和电影演员&#xff0c;右翼分子。主要作品有《金阁寺》《鹿鸣馆》《丰饶之海》等。曾3次获诺贝尔文学奖提名&#xff0c;属…

基于Sketch Up软件校园建模案例分享

Acknowledgements&#xff1a; 由衷感谢覃婉柔、赵泽昊同学在本次课程实习中做出的巨大贡献&#xff0c;感谢本团队成员一起努力奋斗的岁月。 一、建模地点&#xff08;中国地质大学&#xff08;武汉&#xff09;未来城校区图书馆周边&#xff09; 中国地质大学&#xff08;武汉…

关于ChatGPT的一些随笔

大家好&#xff0c;我是老三&#xff0c;最近几个月关于ChatGPT的信息可以说是铺天盖地。 “王炸&#xff0c;ChatGPT……” “xxx震撼发布……” “真的要失业了&#xff0c;xxx来袭……” “普通如何利用ChatGPT……” …… 不过老三前一阵比较忙&#xff0c;对ChatGPT…

【MySQL】锁详解——从结构分类到适用场景

我们要学习锁首先要了解下我们想了解的锁到底是什么&#x1f914; 而在MySQL中给某个数据加锁的本质其实就是在内存中创建一个锁结构与之关联&#xff0c;而这个锁结构就是我们常提到的MySQL的锁&#x1f512; 那么接下来的问题就是&#xff0c;这个锁结构长啥样呢&#xff1…

ASEMI代理ADI亚德诺AD8065ARTZ-REEL7车规级芯片

编辑-Z AD8065ARTZ-REEL7芯片参数&#xff1a; 型号&#xff1a;AD8065ARTZ-REEL7 −3dB带宽&#xff1a;145MHz 0.1 dB平坦度的带宽&#xff1a;7MHz 输入超速恢复时间&#xff1a;175ns 输出恢复时间&#xff1a;170ns 斜率&#xff1a;180V/μs 三阶拦截&#xff1a…