vue二

一,js循环方式

测试

1.循环数组
    <h2>v-for 循环数组</h2>
    <span v-for="item in l">{{item}}</span>
2.循环数组带索引
 <h2>循环数组带索引</h2>
    <span v-for="(item,index) in l">索引位{{index}}的对应值是{{item}}------</span>
3.循环对象默认取value
    <h2>循环对象默认取值</h2>
    <span v-for="item in info">{{item}}---</span>
4.循环对象带key和value
    <h2>循环对象带key和value</h2>
    <span v-for="(item,key) in info">键:{{key}}-- 值:{{item}}---</span>
5.循环字符串
    <h2>循环字符串</h2>
    <span v-for="item in str">{{ item}}</span>
    <h2>循环字符串不显示空格</h2>
    <div v-for="item in str">
        <p v-if="item!=' '">{{item}}</p>
         <br v-else>
    </div>
    <h2>循环字符串带索引</h2>
    <div v-for="(item,index) in str">
        <p v-if="item!=' '">索引是{{index}} 值是{{item}}</p>
        <br v-else>
    </div>
6.循环数字
    <h2>循环数字</h2>
    <!--在python中是range  这里直接填写数字-->
    <div v-for="item in 8">{{item}}</div>
    <h2>循环数字带索引</h2>
    <!--在python中是range  这里直接填写数字 {{index + x}} 可以填写数学运算符-->
    <div v-for="(item,index) in 8">索引:{{index}} ----  值:{{item}}</div>

测试用Vue

<script>
    l1=[11,22,33,44,55]
    var vm = new Vue({
        el: '#app',
        data: {
            l: [1, 2, 3],
            info:{name:'lxj',age:'18',l1},
            str:'hello word'
            
        },
        methods: {},
    })
</script>

循环方式

1.js的循环
    // 1.js的循环
    for(i=0;i<10;i++){
        console.log(i)
    }
   
    var c = [4,5,6,7,8]
    for(i=0;i<c.length;i++){
		 // 拿到索引位
		 console.log(i)
		 // 基于索引循环拿值	
        console.log(c[i])
    }
2.js的in循环
    //js 的in循环 拿到的是索引,可以根据索引取值
    var a = [4,5,6,7]
    for (i in a){
        console.log(i)
        console.log(a[i])
    }

3.es6语法
    var a = [4,5,6,7,8]
    for (item of a){
        console.log(item)
    }
    拿出的是值
4.数组循环
    var a = [4,5,6,7,8]
    a.forEach(function (item){
        console.log(item)
    })
拿的也是值
5.jq循环
    var a = [4,5,6,7,8]
    $.each(a,function (index,item){
        console.log(index,item)
    })

二,key值的解释

key值可以给循环出来的数据加上唯一标识。这样可以加速虚拟dom的替换

每次循环的时候如果不加key值会每次把被循环的数据重新拿出来,加上key值的作用就是只取有变化的数据,没变化的不动。

<div v-for="item in 8" :key="item">{{item}}</div>
<div v-for="(item,index) in a" :key="index">{{item}}</div>

三,数组与对象的监测与更新

我们在提前定义好的键或数据直接修改值页面会产生变化,如果重写一个新的键与值那么页面不会产生变化,但数据变化了。

vue给我们提供了方法

Vue.set(this.info,'hobby','唱跳')
Vue.set(this.数组/对象,index/key,value)

测试代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
    <script scr="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
    <h2>循环对象</h2>
    <div v-for="(value,key) in info">
        <p>key值是:{{key}}</p>
        <p>value值是:{{value}}</p>
        <hr>
    </div>
    <button @click="add">点我加数据</button>
    </div>
</body>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            l: [1, 2, 3],
            info:{name:'lxj',age:'18'},
        },
        methods: {
            add(){
                // 如果提前定义好的键修改页面会有编号
                this.info['name'] = 'nxm'
                // 自己新增一个k:v 页面没有变化,但是conslole里查看值变了
                this.info['hobby'] = '唱跳'
                // 使用下面这种方法添加 值,页面都有变化
                Vue.set(this.info,'hobby','唱跳')
            }
        },
    })
</script>
</html>

四,input事件

# input 的事件:
	click
    input	当输入框进行输入的时候 触发的事件
    change	当元素的值发生改变时 触发的事件
    blur	当输入框失去焦点的时候 触发的事件
    focus   当获得焦点,触发事件

测试代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
    <script scr="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
	 <h2>input事件</h2>
    <input type="text" @input="input">
    <h2>失去焦点</h2>
    <input type="text" @blur="blur">
    <h3>change事件</h3>
    <input type="text" @change="change">
    <h3>焦点事件</h3>
    <input type="text" @focus="focus">
    </div>
</body>

<script>
    var vm = new Vue({
        el: '#app',
        data: {

        },
        methods: {
            input(){
                alert('哈哈')
            },
            blur(){
                alert('走了')
            },
            change(){
                alert('你改啥')
            },
            focus(){
                console.log('别摸我')
            }

        },
    })
</script>
</html>

五, v-model双向数据绑定

input框可以使用:value=‘变量’来设置默认值,我们在input框输入值的时候 值会被js变量拿到,但是输入框有变化变量不会跟着变化,做不到双向数据绑定。

Vue给我们提供了绑定方式v-model

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
    <script scr="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">

    <h2>双向数据绑定</h2>
    <input type="text" value="name">{{name}}
</div>
</body>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            name:'lxj',
        },
        methods: {},
    })
</script>
</html>

image

  <h2>双向数据绑定</h2>
    <input type="text" v-model="name">{{name}}

image

六,事件修饰符

事件修饰符 释义
.stop 只处理自己的事件,子控件冒泡的事件不处理(阻止事件冒泡)
.self 只处理自己的事件,子控件冒泡的事件不处理
.prevent 阻止a链接的跳转
.once 事件只会触发一次(适用于抽奖页面)

测试代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
    <div id="app">
        <div @click="click2">
        <input type="text" @click.stop="click">
            </div>
        <h2>阻止跳转链接</h2>
        <a href="https://www.4hu.tv" @click.prevent="clicka">点我看美女</a>
        <h3>只能点单次</h3>
        <button class="btn btn-success" @click.once="clickon" >抽奖</button>
    </div>
</body>
<script>
    var vm = new Vue({
        el:'#app',
        data:{},
        methods:{
            click(){
                alert('点个屁')
            },
            click2(){
                alert('我是父亲标签')
            },
            clicka(){
                // 可以拦截a标签的链接跳转到自定义链接
                location.href = 'http://www.baidu.com'
            },
            clickon(){
                
                console.log('真可惜没中奖哦')
            }
        },

    })
</script>
</html>

七,按键修饰符

1.按键事件

可以通过设置某个按键按下了,触发某个函数。

@keypress 按压一下就触发

@keydown 按下就触发

@keyup 按下弹起时被触发

keycode对应表
https://www.jb51.net/article/20557.htm

2.事件修饰符

@keyup.enter='函数' 如果不指定修饰符每按一次键都会走一次函数。

d@keyup.13='函数' 也可以通过按键对应的keycode码绑定。

测试代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
   <script src="js/vue.js"></script>
</head>
<body>
    <div id="app">
        <!--效率不高,每次都会走事件虽然没走if-->
        <input type="text" v-model="text" @keyup="keyup"> ---> {{text}}
        <!--直接用修饰符绑定enter键-->
        <input type="text" v-model="text" @keyup.enter="keyup2"> ---> {{text}}
        <!--直接用修饰符绑定enter键对应的数字-->
        <input type="text" v-model="text" @keyup.13="keyup2"> ---> {{text}}

    </div>
</body>
<script>
    var vm = new Vue({
        el:'#app',
        data:{
            text:'',
        },
        methods:{
            // event 自动传进来能显示按键事件对象
            keyup(event){
                console.log(event)
                //打印出来可以看到 属性key对应的使我们按下的键
                console.log(event.key,'被按下了')
                // event.keyCode  会显示键盘按键与keycode对应关系
                console.log(event.key,event.keyCode)
                // 查看keycode对应表得知enter对应的数字是13
                if(event.keyCode == 13){
                    alert('当我按下enter键,我就要发财了')
                }
            },
            // 用按键修饰符 后不需要传event,但是也可以传,要求(在标签内给传参数要使用event),也可以传多个参数对应位置就行
            //   <input type="text" v-model="text" @keyup.13="keyup2($event)"> ---> {{text}}
            keyup2(){
                console.log('我就要发财了')
            }
        },
    })
</script>
</html>

八,表单控制

radio单选 多个radio绑定同一个字符串,选中其中一个就对应value值。

checkbox单选绑定变量的值是布尔类型

checkbox多选 绑定变量是个数组

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
   <script src="js/vue.js"></script>
</head>
<body>
 <div id="app">
     <p>用户名:<input type="text" v-model="username"></p>
     <p>密码:<input type="password" v-model="password"></p>
     <p>
         男<input type="radio" v-model="gender" value="1">
         女<input type="radio" v-model="gender" value="2">
     </p>
    <p>记住密码:<input type="checkbox" v-model="remember"></p>
    <p>爱好:
        唱跳<input type="checkbox" v-model="hobby" value="1">
        rap<input type="checkbox" v-model="hobby" value="2">
        打篮球<input type="checkbox" v-model="hobby" value="3">
    </p>

     <button class="btn btn-success" @click="Click">注册</button>
 </div>
</body>
<script>
    var vm = new Vue({
        el:'#app',
        data:{
            username:'',
            password:'',
            gender:'',
            remember:false,
            hobby:[],
        },
        methods:{
            Click(){
                console.log(this.username,this.password,this.gender,this.remember,this.hobby)
            }
        },
    })
</script>
</html>
posted @ 2023-02-15 19:47  李阿鸡  阅读(1075)  评论(0编辑  收藏  举报
Title