Vue指令 第三天

V-text:
v-text指令的作用是:设置标签的内容
默认写法会替换全部内容,使用差值表达式{{}}
可以替换指定的内容

<body>
    <div id="app">
        <!-- 这种可以显示 -->
        {{ax}}兮兮
        <!-- Vue指令:文本指令,内部嵌套的方式,值就会被设置死  兮兮不会显示 -->
       <h2 v-text="ax">兮兮</h2>
       <h2 v-text="ax+'!'"></h2>
    
    </div>
    <script>
        var vo=new Vue({
            el:"#app",
            data:{
                ax:"哈哈"
            }
        })
    </script>
</body>

V-html:
v-html指令的作用是:设置元素的innerHtml
内容种有html结构会被解析为标签
v-text指令无论内容是什么,只会解析为文本

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <div id="a">
        {{mes}}
        <h2 v-html="mes"></h2>
        <h2 v-text="mes"></h2>
        <h2 v-html="as"></h2>
        <h2 v-text="as"></h2>
    </div>
    <script>
        var app=new Vue({
            el:"#a",
            data:{
                mes:"没有",
                // 用这种标签方式最后会被html标签进行解析,其他不行
                as:"<a href='#'>点击</a>"
            }
        })
    </script>
    
</body>

v-on指令:
v-on指令的作用是:为元素绑定事件
事件名不需要写on
指令可以简写为@
绑定的方法定义在methods属性种
获取data种的属性可以使用this.属性

<body>
    <div id="aop">

        <!-- v-on:click:点击事件 -->
        <input type="submit" value="事件绑定" v-on:click="dolt">


        <!-- 简便方式:@clik==v-on:click  相等的 -->
        <input type="submit" value="事件绑定" @click="dolt">

        <h2 @click="mes">{{foot}}</h2>
    </div>
    
    <script>
        var aop=new Vue({
            el:"#aop",
            data:{
                foot:"西兰花"
            },
            // 方法/方法 放入的地方
            methods:{
                // 第一个方法
                dolt:function(){
                    console.log("1")
                },

                // 第二个方法
                mes:function(){
                	// 获取data种的foot
                    console.log(this.foot);
                    this.foot+="好吃!"
                }

            }
        })
    </script>
</body>

计数器:

<body>
    
    <div style="background-color: silver;width: 65px;" id="aop" >
        <input style="border-radius: 5px;" type="submit" value="-" @click="j1">
        <span style="border: 1px;color: red ;">{{msg}}</span>
        <input style="border-radius: 5px;" type="submit" value="+" @click="z1">
    </div>
    <script>
        var aop=new Vue({
            el:"#aop",
            data:{
                //我需要的值
                msg:1,
                //设置的最大值
                max:5,
                //这个是最小值
                min:0
            },
            methods:{
                j1:function(){
                    if(this.msg!=this.min){
                        //如果  我需要的值不等于设置的最小值  那么就减少
                        this.msg--;
                    }else{
                        //如果  我需要的值等于设置的最小值  那么就停止
                        alert("最小值了!")
                    }
                },

                z1:function(){
                     //如果  我需要的值不等于设置的最大值  那么就增加
                    if(this.msg!=this.max){
                        this.msg++;
                    }else{
                         //如果  我需要的值等于设置的最大值  那么就停止
                        alert("最大值了!")
                    }
                }
            }
        })
    </script>
</body>

总结1:
创建Vue示例时:el(挂载点),data(数据),methods(方法)
v-on指令的作用是绑定事件,简写为@方法种通过this,关键字来获取data中的数据
v-text指令的作用是:设置元素的文本值,简写为 {{}}
v-html指令的作用是:设置元素的innerHtml

v-show:
根据表达式的真假,切换元素显示和隐藏
v-show指令的作用是:根据真假切换元素的显示状态
原理是修改元素的display,实现显示隐藏
指令后面的内容,都最终都会解析为布尔值
值为true元素显示,值为false元素隐藏
数据改变之后,对应的元素的显示状态会同步更新

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    
    <div id="app">
        <!-- v-show:根据true/false  来显示和隐藏 -->
        <div style="background-color: red; width: 100px; height: 100px;" v-show="isshow"></div>
        <input type="submit"  @click="aa" value="显示/隐藏">
    </div>
    <script>
        var a=new Vue({
            el:"#app",
            data:{
                isshow:true
            },
            methods:{
                aa:function(){
                    //取反  例如 isshow是true=false  是false=true
                    this.isshow=!this.isshow; 
                }
            }

        })
    </script>
</body>

v-if:
根据表达式的真假,切换元素的显示和隐藏(操作dom元素)

v-if指令的作用是:根据表达式的真假切换元素的显示状态
本质是通过操作dom元素来切换显示状态
表达式的值为true,元素存在于dom树中,为false,从dom树种移除
频繁的切换v-show,反之使用v-if,前者的切换消耗小

<body>

    <div id="aop">
        <p v-if="isshow">隐藏</p>
        <p v-if="istrue">显示</p>

        <p @click="a">点击我一下</p>
    </div>

    <script>
        var v=new Vue({
            el:"#aop",
            data:{
                isshow:true,
                istrue:true
            },
            methods:{
                a:function(){
                    this.isshow=!this.isshow;
                    this.istrue=!this.istrue;
                }
            }
        })
    </script>
</body>

v-bind:
设置元素的属性(比如:src.title.class)
v-bind:属性名=表达式

v-bind指令的作用是:为元素绑定属性
完整的写法是v-bind:属性名
简写的话可以直接省略v-bind,只保留**:属性名**
需要动态的增删class建议使用对象的方式

<body>
    
    <div id="app">
        <!-- v-bind:属性名=表达式 -->
        <img v-bind:src="ss" v-bind:title="title">

        <!-- 简易写法:    三元表达式  如果为true执行第一个   false就执行第二个 -->
        <img :src="ss" :class="anctiv?'active':''" @click="a" >

    
    </div>

    <script>
        var ve=new Vue({
            el:"#app",
            data:{
                ss:"img/aaaa.png",
                title:"守望先锋",
                anctiv:false
            },
            methods:{
                a:function(){
                    this.anctiv=!this.anctiv
                }
            }
        })
    </script>
</body>

图片切换:

<body>
    <div id="aop">
       
        <img :src="arry[index]">
        <!-- 如果  数组是为第一张那就不显示上一张     如果  数组是为最后一张那就不显示下一张 -->
        <span @click="prev" v-show="index!=0" >上一张</span>  <span @click="next" v-show="index<arry.length-1"  >下一张</span>
    </div>
    <script>
        var vue=new Vue({
            el:"#aop",
            data:{
                // 把所有的图片存入数组种
                arry:["img/aaaa.png","img/bbb.jpg","img/ccc.jpg","img/ddd.jpg"],
                index:0
            },
            methods:{
                prev:function(){
                   this.index--;
                   
                },
                next:function(){
                    this.index++
                }
            }
        })
    </script>
</body>

v-for:
根据数据生成列表结构

v-for指令的作用是:根据数据生成列表结构
数组经常和v-for结合使用
语法是(item,index)in 数据
item和index可以结合其他指令一起使用
数组长度的更新会同步到页面上,是响应式的

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>


    <div id="aop">
        <!-- v-for:也就是foreach 循环   itme 变量名  index 索引名   in表达式  arry想要遍历的变量名   -->
        <p v-for="(itme,index) in arry">{{index+1}}{{itme}}</p>
        <h2 v-for="itme in obh"  v-bind:title="itme">{{itme.name}}</h2>
        <button @click="add">添加</button>
        <button @click="remove">移除</button>
    </div>

    <script>
        var v=new Vue({
            el:"#aop",
            data:{
               
                arry:[1,2,3,4,5],
                obh:[
                    {name:"hah"}
                ]
            },
            methods:{
                add:function(){
                    // 添加
                    this.obh.push({name:"292"})
                },
                remove:function(){
                    // 默认移除最左边的数据
                    this.obh.shift()
                }
            }
        })
    </script>
</body>

v-on:
传递自定义参数,事件修饰符

事件绑定的方法写成函数调用的形式,可以传入自定义的参数
定义方法时需要定义形参来接收传入的实参
事件的后面跟上 .修饰符可以对事件进行限制或者(补充)
.enter 可以限制触发的按键为回车
事件修饰符有很多种

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <div  id="aop">
        <!-- @keyup:  键盘事件  后面的enter是回车事件 也是补充的事件 -->
        <input type="text" @keyup.enter="sayHi">

        <input type="button" @click="h(777,'张飞')" value="提交">
    </div>
    
    <script>
        var v=new Vue({
            el:"#aop",
            methods:{
                sayHi:function(){
                    alert(
                        "吃了没"
                    )
                },
                h:function(p1,p2){
                    console.log(p1)
                }
            }
        })
    </script>
    
</body>

v-model:
获取和设置表单元素的值(双向数据绑定)

v-model指令的作用是便捷的设置和获取表单元素的值
绑定的数据会和表单元素值相关联
绑定的数据<---->表单元素的值

<body>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

<div id="aop">
    <!-- v-model: 双向绑定 -->
    <input type="text" v-model="mas" @keyup.enter="s">
    <button @click="set">修改值</button>
    {{mas}}
</div>

<script>
    var v=new Vue({
        el:"#aop",
        data:{
            mas:"哈哈"
        },
        methods:{
            s:function(){
                alert(this.mas)
            },
            // 可以直接修改值
            set:function(){
                this.mas="哈哈s"
            }
        }
    })
</script>


</body>

CRUD:
最重要的是掌握方法API

增加:

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>   


    <div id="aop">
        <input type="text"  v-model="msg" @keyup.enter="add" >
        <ul>
            <li v-for="(itme,index) in arry">
                <label>{{itme}}</label>
            </li>
        </ul>
    </div>


    <script>
        var v=new Vue({
            el:"#aop",
            data:{
                arry:["写代码","吃饭","睡觉"],
                msg:""
            },
            methods:{
                // 在数组中存入 值  
                add:function(){
                    this.arry.push(this.msg)
                }
            }
        })
    </script>
</body>

删除:

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>   


    <div id="aop">
        <input type="text"  v-model="msg" @keyup.enter="add" >
        <ul>
            <li v-for="(itme,index) in arry">
                <label @click="remove(index)">{{itme}}</label>
            </li>
        </ul>
    </div>


    <script>
        var v=new Vue({
            el:"#aop",
            data:{
                arry:["写代码","吃饭","睡觉"],
                msg:""
            },
            methods:{
                // 在数组中存入 值  
                add:function(){
                    this.arry.push(this.msg)
                },
                // splice:删除指定内容  里面的参数是  索引  和  删除的个数(删几个)
                remove:function(index){
                   this.arry.splice(index,1)
                }
            }
        })
    </script>
</body>

清空:

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>   


    <div id="aop">
        <input type="text"  v-model="msg" @keyup.enter="add" >
        <ul>
            <li v-for="(itme,index) in arry">
                <!-- 通过remove方法传入index索引然后删除元素 -->
                <label @click="remove(index)">{{itme}}</label>
            </li>
        </ul>
        <!-- 统计:也是计算好多条数据 -->
        <footer style="color: red;">数据为:{{arry.length}}条</footer>
        <footer @click="clea">清空</footer>
    </div>


    <script>
        var v=new Vue({
            el:"#aop",
            data:{
                arry:["写代码","吃饭","睡觉"],
                msg:""
            },
            methods:{
                // 在数组中存入 值  也就是所谓的添加
                add:function(){
                    this.arry.push(this.msg)
                },
                // splice:删除指定内容  里面的参数是  索引  和  删除的个数(删几个)
                remove:function(index){
                   this.arry.splice(index,1)
                },
                // 清空
                clea:function(){
                    this.arry=[];
                }
            }
        })
    </script>
</body>

隐藏:
v-show
完整代码CRUD

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>   


    <div id="aop">
        <input type="text"  v-model="msg" @keyup.enter="add" >
        <ul>
            <li v-for="(itme,index) in arry">
                <!-- 通过remove方法传入index索引然后删除元素 -->
                <label @click="remove(index)">{{itme}}</label>
            </li>
        </ul>
        <!-- 统计:也是计算好多条数据     如果数组的长度大于0true  小于0为false所以会隐藏-->
        <footer style="color: red;" v-show="arry.length>0">数据为:{{arry.length}}条</footer>
        <footer @click="clea" v-if="arry.length>0">清空</footer>
    </div>


    <script>
        var v=new Vue({
            el:"#aop",
            data:{
                arry:["写代码","吃饭","睡觉"],
                msg:""
            },
            methods:{
                // 在数组中存入 值  也就是所谓的添加
                add:function(){
                    this.arry.push(this.msg)
                },
                // splice:删除指定内容  里面的参数是  索引  和  删除的个数(删几个)
                remove:function(index){
                   this.arry.splice(index,1)
                },
                // 清空
                clea:function(){
                    this.arry=[];
                }
            }
        })
    </script>
</body>
上一篇:290. Word Pattern(单词模式)


下一篇:在LINUX环境终端下用C语言实现推箱子小游戏