vue入门 vue基础之简单使用3--指令集2

指令集:指令集是指指令的集合 ,而指令:凡是v-开头的都是vue指令
详细代码看最后

v-bind(属性绑定)

作用:动态绑定标签上的属性,当标签上的属性是变量,动态的,需要即时改变的,即可使用v-bind 。例如某个标签id名,类名是动态的,会进行变化,则可以使用这个

使用:
使用v-bind:xxx=“vue对象中data的key值”
也可以简写成:xxx=key值xxx是值

1.基本使用

------------------------html
        <!-- 此处绑定了data中key为pTest的值,即变成了ppppp-->     
         <p v-bind:id="pTest">sss</p> 
         <!-- 简写 -->
        <!-- <p :id="pTest">jjjj</p> -->
        <!-- 此处虽然也是绑定,但是在页面上会发现,id还是pTest,相当于未绑定-->
        <p v-bind:id="'pTest'">sss</p>
------------------------js
var vm= new Vue({
        el:"#app", 
        data:{
           pTest:"ppppp",
        }
        })

结果如图
在这里插入图片描述

2.表达式进行样式判断
例如通过三元运算

        <!-- 表达式进行样式判断 -->
        <p :class="showStyle?'p-style':''">jjjjjj</p>
        <!-- 简写 -->
        <p :class="{'p-style':showStyle}">jjjjjj</p>
------------------------js        
        var vm= new Vue({
        el:"#app", 
        data:{
           pTest:"ppppp",
        }
        })
-----------------------style
        .p-style{
            background-color:aquamarine;
            color:red;
        }

根据showStyle的值,来指定当前标签的类名
当showStyle为true时,当前标签的类名为p-style ,否则为空
showStyle为true时(此时绑定的类名为p-style):
在这里插入图片描述
showStyle为false时(无指定类名):
在这里插入图片描述

3.多样式结合
可以通过v-bind绑定多个样式,用数组来包括

        <p :class="['p-style','bolder']">jjjjjj</p>
        <!-- 多样式判断并表达式结合版 -->
        <p :class="['bolder',showStyle?'p-style':'p-style2']">jjjjjj</p>
        <!-- 多样式判断并表达式结合,简写版 -->
        <p :class="['bolder',{'p-style':showStyle}]">jjjjjj</p>

其实与2的一致,只是多了数组来包含多个标签而已

4.样式绑定
这个时候,可以发现,所有的v-bind的简写,都是用键值对的方式来进行绑定。例如:

        <!-- <p :style="{color:'red'}">pppp</p> -->

5.综合实现

5.1 通过点击事件,变更标签颜色

        <p :style="{color:colorStyle}">我的颜色</p>
        <button @click="changeColor">我变色</button>
-------------js
 var vm= new Vue({
        el:"#app", 
        data:{
           colorStyle:"red"
        },
        methods:{
            changeColor(){
                this.colorStyle="blue"
            }
        }

5.2 更负责一点的变更

        <!-- 注意 v-bind中不识别横线"-",尤其是style中的横线,一般可以将其使用双引号括起来,或者将横线取消并下一个字母大写 -->
        <p :style="{color:colorStyle,'border-width':'1px',borderColor:'blue'}">我色色</p>
        <button @click="changeColor">我也来变色</button>
----------------js
 var vm= new Vue({
        el:"#app", 
        data:{
           colorStyle:"red"
        },
        methods:{
            changeColor(){
                this.colorStyle="blue"
            }
        }

v-model(数据绑定)

所谓数据绑定,其实就是完成双向绑定的效果
v-model可以处理input,textarea,select,radio,checkbox,button 该属性只能用在表单标签,或有valule属性的标签
1.不用v-model的双向数据绑定

<div id="app">
        <!-- 数据绑定的简单实现 -->
        {{msg}}
        <input type="text" :value="msg" @input="changeInput($event)">

        <!-- 使用v-model进行实现  只能修饰表单元素 -->
    </div>
 --------------------js
    <script>
        var vm= new Vue({
            el:"#app",
            data:{
                msg:"别理我"
            },
            methods:{
                changeInput(e){
                    this.msg=e.target.value;
                }
            }
        });
    </script>

以上代码中,在输入框中输入对应的数据时,普通标签上的数据会随时变更。这里的:value就是实时的与msg进行绑定
2. 使用v-model进行双向数据绑定
使用v-model即可完成1的操作

        {{msg}}
        <!-- 使用v-model进行双向绑定 v-bind无法进行双向绑定 -->
        <input type="text" v-model="msg"><br>
 --------------------js
            var vm = new Vue({
            el:"#app",
            data:{
                msg:"yyy",
            },

3.v-model进行联动变化
不管是输入,还是拖动,都会连带其他两个进行变化

        {{msg}}<br>
        <input type="text" v-model="range"><br>
        <input type="range" v-model="range">
  --------------------js       
                var vm = new Vue({
            el:"#app",
            data:{
                msg:"yyy",
                range:100
            },
            methods:{
                inputChange(e){
                    this.msg=e.target.value;
                }
            }
        })

至于v-model,还有其他深层次的使用
v-model指令后面跟的参数(number、lazy、debounce

v-once 单次渲染

v-once的意思就是,你可以渲染我,但是只能渲我一次

 <div id="app">
        <!-- v-once表示只渲染一次 -->
        <p v-once>{{msg}}</p><br>
        <input type="text" :value="msg" @input="changeEvent($event)">
        <input type="text" v-model="msg">
    </div>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{msg:"zengyu"
            },
            methods:{

            }
        });
    </script>

v-for 遍历

v-for的作用就是对数据(数组,对象,数组对象)进行遍历,提取出里面的值,

<!--item index 只是名称 ,可以根据自己的定义进行更改 例如obj,i 之类的 -->
            <li v-for="item in array">{{item}}</li>
            <--v-for迭代数组时,第一个参数为对象,第二个为索引 -->
            <li v-for="(item,index) in objArray">{{item.name}}{{item.id}}--{{index}}</li> 
            
			<!-- v-for迭代对象时,第一个参数为对象属性的value,第二个为属性的key,第三个才是索引 -->
            <!-- <li v-for="(value,key,index) in obj">{{value}}-{{key}}--{{index}}</li>  有的时候会简写成k,v,i -->

			<!--指定次数循环-->
            <li v-for="item in 10">{{item}}</li>
-------------------js
   var vm= new Vue({
            el:"#app", 
            data:{
                count:1,
                msg:"zengyu",
                array:[1,1,3,4,5,78,9],
                objArray:[{
                    id:1,age:5,name:"jjj"
                },{
                    id:1,age:5,name:"ddd"
                },{
                    id:1,age:5,name:"ddd"
                },{
                    id:1,age:5,name:"jdddjj"
                },
                ],
                obj:{
                    name:"ZengYu",
                    age:10,
                    height:500
                }
            }
        });

源代码

v-bind

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
    <title>v-bind</title>
    <style>
        .p-style{
            background-color:aquamarine;
            color:red;
        }
        .p-style2{
            background-color:rgb(229, 127, 255);
            color:blue;
        }
        .bolder{
            font-weight: 500;
        }
    </style>
</head>
<body>
    <div id="app">
        <!-- v-bind的作用是绑定标签上的所有属性 -->
        <!-- 当标签上的属性是变量,动态的,需要改变的,即可使用v-bind -->
        <!-- 此处绑定了data中key为pTest的值,在页面中会发现,id变成了key所对应的value -->
        <!-- <p v-bind:id="pTest">sss</p> -->
        <!-- 此处虽然也是绑定,但是在页面上会发现,id还是pTest 其实就是相当于指定了一样-->
        <!-- <p v-bind:id="'pTest'">sss</p> -->
        <!-- 简写 -->
        <!-- <p :id="pTest">jjjj</p> -->

        <!-- 表达式进行样式判断 -->
        <p :class="showStyle?'p-style':''">jjjjjj</p>
        <!-- 简写 -->
        <p :class="{'p-style':showStyle}">jjjjjj</p>


        <!-- 多样式结合 -->
        <!-- <p :class="['p-style','bolder']">jjjjjj</p> -->
        <!-- 多样式判断并表达式结合版 -->
        <!-- <p :class="['bolder',showStyle?'p-style':'p-style2']">jjjjjj</p> -->
        <!-- 多样式判断并表达式结合,简写版 -->
        <!-- <p :class="['bolder',{'p-style':showStyle}]">jjjjjj</p> -->


        <!-- 样式绑定 -->
        <!-- 其实综合下来发现,不管是class还是style的绑定,都是以键值对的方式 -->
        <!-- <p :style="{color:'red'}">pppp</p> -->


        <!-- 简单实现 -->
        <p :style="{color:colorStyle}">我的颜色</p>
        <button @click="changeColor">我变色</button>

        <!-- 复杂点实现 -->
        <!-- 注意 v-bind中不识别横线"-",尤其是style中的横线,一般可以将其使用双引号括起来,或者将横线取消并下一个字母大写 -->
        <p :style="{color:colorStyle,'border-width':'1px',borderColor:'blue'}">我色色</p>
        <button @click="changeColor">我也来变色</button>
    </div>
    <script>
            var vm= new Vue({
        el:"#app", 
        data:{
           pTest:"ppppp",
           showStyle:false,
           colorStyle:"red"
        },
        mounted(){

        }
        ,
        methods:{
            changeColor(){
                this.colorStyle="blue"
            }
        }
    });
    </script>
</body>
</html>

v-model

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>v-model  v-cloak</title>
    <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
    <style>
        [v-cloak]{
            display:none
        }
    </style>
</head>
<body>
    <!-- 在最外层加上v-cloak时,可以解决页面在未完全加载时{{msg}}会展示丑数据的问题
    v-cloak cloak披风,遮盖物 ,表示在延迟加载时,可以做出一些动作,掩盖一些行为 -->
    <div id="app" v-cloak>
        
        {{msg}}<br>
        
        <!-- 数据绑定的基本实现 event是固定写法 -->
        <input type="text" :value="msg" @input="inputChange($event)"><br>

        <!-- 使用v-model进行双向绑定 v-bind无法进行双向绑定 -->
        <input type="text" v-model="msg"><br>

        {{range}}<br>
        <!-- 使用v-model进行联动的变化 -->
        <input type="text" v-model="range"><br>
        <input type="range" v-model="range">

        <!-- 总结:v-model可以处理input,textarea,select,radio,checkbox,button 该属性只能用在表单标签,或有valule属性的标签-->
    </div>
    <script>
        // setInterval(() => {
        //     var vm = new Vue({
        //     el:"#app",
        //     data:{
        //         msg:"yyy",
        //         range:100
        //     },
        //     methods:{
        //         inputChange(e){
        //             this.msg=e.target.value;
        //         }
        //     }
        // });
        // }, 2000);
        var vm = new Vue({
            el:"#app",
            data:{
                msg:"yyy",
                range:100
            },
            methods:{
                inputChange(e){
                    this.msg=e.target.value;
                }
            }
        })
    </script>
</body>
</html>

v-for

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
    <title>v-for</title>
</head>
<body>
    <div id="app">
        <ul>
            <!-- item index 只是名称 ,可以根据自己的定义进行更改 例如obj,i 之类的 -->
            <!-- <li v-for="item in array">{{item}}</li>
            <li v-for="item in objArray">{{item.name}}</li> -->
            <!-- v-for迭代数组时,第一个参数为对象,第二个为索引 -->
            <!-- <li v-for="(item,index) in objArray">{{item.name}}--{{item.id}}--{{index}}</li> -->

            <!-- v-for迭代对象时,第一个参数为对象属性的value,第二个为属性的key,第三个才是索引 -->
            <!-- <li v-for="(value,key,index) in obj">{{value}}-{{key}}--{{index}}</li>  有的时候会简写成k,v,i -->

            <!-- 指定循环 -->
            <li v-for="item in 10">{{item}}</li>

        </ul>
    </div>
    <script>
        var vm= new Vue({
            el:"#app", 
            data:{
                count:1,
                msg:"zengyu",
                array:[1,1,3,4,5,78,9],
                objArray:[{
                    id:1,age:5,name:"jjj"
                },{
                    id:1,age:5,name:"ddd"
                },{
                    id:1,age:5,name:"ddd"
                },{
                    id:1,age:5,name:"jdddjj"
                },
                ],
                obj:{
                    name:"ZengYu",
                    age:10,
                    height:500
                }
            },
            mounted(){

            }
            ,
            methods:{

            }
        });
    </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值