天天看点

Vue基础知识点1

v-for 遍历

<!DOCTYPE html>
<html >
<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>Document</title>
</head>
<body>
    <div id="app">
        <div v-for="(item,index) in arr">{{item}}-----{{index}}</div>
        <hr>
        <div v-for="(item,index) in 'qianfeng'">{{item}}-----{{index}}</div>
        <hr>
        <div v-for="(item,index) in 5">{{item}}-----{{index}}</div>
        <hr>
        <div v-for="(item,index) in obj">{{item}}</div>
    </div>
</body>
</html>
<script src="vue.js"></script>
<script>
    var vm = new Vue({
        el:"#app",
        data:{
           arr:[10,20,30,40],
           obj:{
               username:"zhangsan",
               age:10
           }
        }
    })

    /*
       v-for:  遍历

        可以用来遍历任何对象
            数组 字符串   对象.......
    
    */


</script>
           

v-on 时间绑定 简写@

<!DOCTYPE html>
    <html >
    <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>Document</title>
        <style>
            .box{
                width:200px;
                height: 200px;
                background: red;
            }
    
            .box1{
                width: 100px;
                height: 100px;
                background: yellow;
            }
        </style>
    </head>
    <body>
        <div id="app">
            <h2>{{msg}}</h2>
            <!-- <button v-on:click="handleClick">点击</button> -->
            <button @click="handleClick">点击</button>
            <hr>
    
            <div class="box" @click="handleBox(123,$event)">
                <div class="box1" @click.stop.once="handleBox1"></div>
            </div>
            <hr>
    
            <div class="box" @click="handleBox">
                    <div class="box1" @contextmenu.prevent.stop="handleBox1"></div>
            </div>
    
            <hr>
            <input type="text" @keydown.enter="handlekeydown">
        </div>
    </body>
    </html>
    <script src="vue.js"></script>
    <script>
        var vm = new Vue({
            el:"#app",
            data:{
               msg:1910
            },
            //用来存放vue所需要的函数   当前组件所需要的函数
            methods:{
                handleClick(){
                   this.msg = 1907
                },
                handleBox(val,e){
                    console.log(val,e)
                },
                handleBox1(){
                    alert('box1')
                }
                ,handlekeydown(){
                    console.log(111)
                }
            }
        })
    
        /*
          v-on:事件绑定
            语法:
                v-on:事件名称 = 事件函数
                v-on:click=事件函数
    
    
          简写:@事件名称
    
    
          修饰符:
            作用:修饰指令
    
            语法:
                指令.修饰符.修饰符........
    
            stop    阻止冒泡
            prevent 阻止浏览器默认事件
            enter   按下回车
            once    事件只绑定一次
    
          事件对象:
            如果需要使用事件对象的情况下只需要给函数传递一个$event即可
    
    
    
        数据能够驱动视图?底层用的是Object.defindProperty()来做数据的劫持
        
        */
    
    
    </script>
           

v-pre、 v-cloak、 v-once

<div>{{msg}}</div>
        <p v-pre>vue中的{{msg}}用来解析数据的</p>
           
Vue基础知识点1
Vue基础知识点1

br

<!DOCTYPE html>
<html >
<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>Document</title>
</head>
<body>
    <div id="app">
        <div>{{msg}}</div>
        <p v-pre>vue中的{{msg}}用来解析数据的</p>
        <h2>{{msg}}</h2>
        <button @click="handleClick()">修改</button>
    </div>
</body>
</html>
<script src="vue.js"></script>
<script>

    let vm = new Vue({
        el:"#app",
        data:{
            msg:1910
        }
        ,methods:{
            handleClick(){
                this.msg = 1907;
            }
        }
    })

/*
    v-pre:作用是不解析{{}}
    v-cloak : 作用防止{{}}在vue.js没有加载进来的时候显示
    v-once:数据只解析一次

*/
</script>
           

先看效果

Vue基础知识点1
<!DOCTYPE html>
<html >

<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>Document</title>
</head>

<body>
    <div id="app">
        <input type="text" v-model="msg">
        <p>{{msg}}</p>
        <hr>
        <label>
            男 <input type="radio" value="男" v-model="radioVal">
        </label>
        <label>
            女<input type="radio" value="女" v-model="radioVal">
        </label>
        <p>您选择的性别是:{{radioVal}}</p>
        <hr>
        <label>
            抽烟 <input type="checkbox" value="抽烟" v-model="checkVal">
        </label>
        <label>
            喝酒 <input type="checkbox" value="喝酒" v-model="checkVal">
        </label>
        <label>
            烫头 <input type="checkbox" value="烫头" v-model="checkVal">
        </label>
        <label>
            大保健 <input type="checkbox" value="大保健" v-model="checkVal">
        </label>
        <ul>
            <li v-for="item in checkVal">{{item}}</li>
        </ul>
        <hr>
    <select v-model="seletVal">
        <option value="1998">1998</option>
        <option value="1999">1999</option>
        <option value="2000">2000</option>
        <option value="2001">2001</option>
        <option value="2002">2002</option>
    </select>
    <p>您的出身日期为:{{seletVal}}</p>
    <hr>
    <h2>基于Object.defineProperty实现双数据绑定</h2>

    <label>
        抽烟 <input type="checkbox" value="抽烟" @change="handleChange($event)">
    </label>
    <label>
        喝酒 <input type="checkbox" value="喝酒" @change="handleChange($event)">
    </label>
    <label>
        烫头 <input type="checkbox" value="烫头" @change="handleChange($event)">
    </label>
    <label>
        大保健 <input type="checkbox" value="大保健" @change="handleChange($event)">
    </label>
    <ul>
        <li v-for="(item,index) in arr">{{item}}</li>
    </ul>
</div>

</body>

</html>
<script src="vue.js"></script>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            msg: 1910,
            radioVal: "男",
            checkVal: [],
            seletVal: 2000,
            arr:[]
        },
        methods: {
            handleChange(e){
                let val = e.target.value;
                if(this.arr.length>0){
                    let flag = this.arr.includes(val);
                    if(flag){
                        let index= this.arr.indexOf(val);
                        this.arr.splice(index,1)
                    }else{
                        this.arr.push(val);
                    }

                }else{
                    this.arr.push(val);
                }
            }
        },
    })


    /*
       v-model:双数据绑定
           v-model可以直接修改data中的属性值,当数据发生改变的时候视图也会发生改变

           v-model只能应该到form表单身上 其他元素无法使用

           v-model也有自己的修饰符 number  代表输入框里面的值是一个数字类型的

       底层原理
           Object.defindProperty来实现,在vue3.0中  将Object.defindProperty替换成了Proxy,
           通过给data中的每一个属性加一个数据劫持(给每一个属性加了一个getter/setter方法)

    */
</script>