Vue学习day2.md

本文介绍了Vue中常用的指令如v-on用于事件绑定,v-model实现数据双向绑定,以及事件修饰符和表单修饰符的应用。通过一个信息登记表的小案例,详细解析了Vue在实际开发中的应用。
摘要由CSDN通过智能技术生成

一、常用的指令

v-html 、v-text用来进行数据绑定
v-bind实现属性绑定
:class动态样式绑定(4种方式)
style动态绑定style的值是一个对象
v-if节点的插入和删除
v-show元素的显示和隐藏
v-for用于对数组或对象进行遍历显示
v-on绑定事件
v-model表单元素数据绑定

1、v-on:绑定事件

  • 使用
   <标签 v-on:click="函数()"></标签>
      简写
   <标签 @click="函数()"></标签>
  • 事件传参
  <标签 v-on:click="函数(实参)"></标签>
   new Vue({
        el:"#app",
        data:{},
        methods:{
          事件函数(形参){
          }
        }
   })

2、this的使用

  • this指向的是vue实例

  • 事件对象

   <标签 @事件名="事件函数"></标签>    //不需要传入实参
   new Vue({
        el:"#app",
        data:{},
        methods:{
          事件函数(形参){  //没有传入实参,那么这个形参就是事件对象
          }
        }
   })
  • 传实参还要有事件对象
   <标签 @事件名="事件函数(实参,$event)"></标签>    //形参和实参位置要一一对应
   new Vue({
        el:"#app",
        data:{},
        methods:{
          事件函数(形参,事件对象形参){  
          }
        }
   })
   <!DOCTYPE html>
   <html lang="en">
   <head>
          <meta charset="UTF-8">
          <title>Document</title>
          <script src="./js/vue.js"></script>
          <style>
              .box{
                  width: 200px;
                  height: 200px;
                  background-color: pink;
              }
          </style>
    </head>
    <body>
         
          <div  id="app">
              <button v-on:click="fn()">点我</button>
              <button v-on:click="fn">点我</button>
              <button @click="fn()">点我</button>
      
              <ul>
                  <li v-for="(item,index) in arr" :key="index">
                      {{item}}  <button @click="del(index)"> 删除</button>
                  </li>
              </ul>
      
              <div class="box" @mousemove="move"></div>
      
              <a href="http://www.baidu.com" @click="run('成都',$event)">百度</a>
          </div>
    </body>
    <script>
      var app=new Vue({
          el:"#app",   
          data:{   
              msg:"it",
              arr:["香蕉","葡萄","苹果"]
          },
          methods:{
              fn(){
                  alert("好好")
              },
              del(ind){  //删除
              //    alert(ind)
              // this指向的是vue实例
                 console.log(this.msg)
              },
              move(event){   //移动事件
                  // 如果函数没有传入实参,methods里面的事件函数定义的形参就是事件对象
              console.log(event.offsetX)
              },
              run(city,event){   //阻止默认行为
               event.preventDefault();
               alert(1111,city)
              }
          }
      })
      
      var box=document.querySelector(".box");
      box.onmousemove=function(event){
          console.log(event.offsetX)
      }
      
      var a=document.querySelector("a")
      a.onclick=function(event){
         // 阻止元素的默认行为
         event.preventDefault()
           alert(1111);
      }
      
   </script>
   </html>

3、v-model

  • 作用:表单元素数据绑定

架构思想:MVVM

数据双向绑定:数据层改变,视图层跟着改变; 视图层改变,数据层跟着改变;

二、修饰符

  • 什么是修饰符: 修饰我们事件和v-model的符号,简化我们的一些操作
   <标签   @事件名.修饰符="事件函数"></标签名>
    
   <input v-model.修饰符="变量"/>

1、事件修饰符

事件修饰符含义
.stop阻止事件冒泡
.prevent阻止默认行为
.self只当在 event.target 是当前元素自身时触发处理函数
.once一次性事件绑定

2、键盘修饰符 (键盘事件)

  • .enter .up .down .left .right
   <!DOCTYPE html>
   <html lang="en">
   <head>
          <meta charset="UTF-8">
          <title>Document</title>
          <script src="./js/vue.js"></script>
          <style>
              .box{
                  width: 300px;
                  height: 300px;
                  background-color: pink;
              }
              .small{
                  width: 150px;
                  height: 150px;
                  background-color: red;
              }
          </style>
    </head>
    <body>
         
          <div  id="app">
      
              <input type="text" @keydown.enter="down"/>
      
               <!-- 阻止默认行为 -->
             <a href="http://www.baidu.com" @click.prevent="fn">百度</a>
                <!-- 一次性绑定 -->
             <button @click.once="pay">确认支付</button>
      
             <div class="box" @click="fn1">
                 <!-- 阻止冒泡 -->
                 <div class="small" @click.stop="fn2"></div>
                 
             </div>
      
               <!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
             <div class="box" @click.self="fn1">
              <!-- 阻止冒泡 -->
              <div class="small" @click="fn2"></div>
             </div>
      
          <div class="box" @click="fn1">
              <!-- 修饰符可以串联 -->
              <a href="http://www.baidu.com" @click.stop.prevent="fn">百度</a>
              
          </div>
              </div>
    </body>
    <script>
    
      var app=new Vue({
          el:"#app",   
          data:{   
              
          },
          methods:{
              fn(){
                  alert(1111);
              },
              pay(){
                  alert("支付完成")
              },
              fn1(){
                  alert("大盒子box")
              },
              fn2(){
                  alert("小盒子small")
              },
              down(){
                  console.log("enter");
                  
              }
          }
      })
    
   </script>
   </html>

3、表单修饰符

表单修饰符含义
.lazy不会实时数据绑定,在changge事件中进行数据绑定
.number将输入的内容数据类型转换为数值
.trim过滤首尾空白字符
   <!DOCTYPE html>
   <html lang="en">
   <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script src="./js/vue.js"></script>
   </head>
   <body>
       
        <div  id="app">
    
            <input type="text"  v-model.lazy="username"  />
        {{username}}
    
           年龄:<input type="text" v-model.number="age"/>
    
           <input type="text" v-model.trim="str"/>
        </div>
   </body>
   <script>
    
   var app=new Vue({
        el:"#app",   
        data:{   
           username:"",
           age:0,
           str:""
        }
   })
    
   </script>
   </html>

三、信息登记表Vue小案例

表单数据动态添加

1、信息登记表思路

在这里插入图片描述

2、实现代码

   <!DOCTYPE html>
   <html lang="en">

   <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>信息表</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.0/dist/css/bootstrap.min.css">
    <script src="./js/vue.js"></script>
   </head>

   <body>
   <div id="app">
        <div class="container">
            <h3 class="text-center text-primary">信息登记表</h3>
            <label for="username">姓名:</label>
            <input type="text" id="username" v-model='name' class="form-control" placeholder="请输入姓名">
            <label for="tel">账号:</label>
            <input type="text" id="tel" v-model='tel' class="form-control" placeholder="请输入账号">
            <label for="info">信息:</label>
            <input type="text" id="info" v-model='info' class="form-control" placeholder="请输入信息">
            <div class="text-center">
                <button type="button" class="btn btn-primary" @click='add'>添加</button>
                <button type="button" class="btn btn-info" @click='reset'>重置</button>
            </div>
            <h3 class="text-center text-primary">信息表</h3>
            <table class="table table-bordered table-hover">
                <thead>
                    <tr>
                        <th>序号</th>
                        <th>姓名</th>
                        <th>账号</th>
                        <th>信息</th>
                        <th>操作</th>
                    </tr>
                </thead>
                <tbody>
                    <tr v-for='(item,i) in dataList'>
                        <td>{{i>8 ? i+1 :"0"+(i+1)}}</td>
                        <td>{{item.name}}</td>
                        <td>{{item.tel}}</td>
                        <td>{{item.info}}</td>
                        <td>
                            <button @click='del(i)' type="button" class="btn btn-danger">删除</button>
                        </td>
                    </tr>
                    <tr v-if='dataList.length==0'>
                        <td colspan="5">暂无数据</td>
                    </tr>
                    <tr v-if='dataList.length>0'>
                        <td colspan="5">
                            <button @click='delAll' type="button" class="btn btn-danger">全部删除</button>
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>
    <script>
        new Vue({//属性和方法
            el: '#app',
            data: {//属性
                name: '',
                tel: '',
                info: '',
                dataList: []
            },
            methods: {
                //添加信息事件
                add() {
                    this.dataList.push({
                        name: this.name,
                        tel: this.tel,
                        info: this.info
                    })
                    //输入结束之后 调用重置方法
                    this.reset()
                    console.log(this.dataList)
                },
                //重置事件
                reset() {
                    this.name = ''
                    this.tel = ''
                    this.info = ''
                },
                //单条删除事件
                del(n) {
                    this.dataList.splice(n, 1)
                },
                //全部条数删除事件
                delAll() {
                    this.dataList=[]
                }
            }
        })
   </script>
   </body>
   </html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值