• Vue指令


    一.文本操作指令

    1.v-text

    v-text <==> {{}}
    <p v-text="msg"></p>
    

    2.v-html

    <p v-html="msg"></p>
    // <b>123</b>  => 加粗的123
    

    3.v-once

    <p v-once>
        {{msg}}
    </p>
    // 只能被赋值一次
    

    4.v-model

    <input type="text" v-model="val">
    // v-model控制的是表单元素的value值
    

    v-bind v-text v-html v-once

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            p{
                background-color: orange;
                line-height: 12px;
            }
        </style>
    </head>
    <body>
        <div id="app">
            <!--html全局属性语法:全局属性名=‘属性值’-->
            <p v-bind:title="title" a="a" b="b">擦不掉</p>
            <!--v-model也是对文本操作的指令-->
            <input type="text" v-model="msg">
            <!--采用文本指令后,页面标签的内容由vue实例控制,原来用于表示标签的文本均会被替换-->
            <p>{{msg}}</p>
            <!--eg:原本文会被msg替换-->
            <p v-text="msg">原文本</p>
            <!--可以解析带html标签的文本信息-->
            <p v-html="msg"></p>
            <!--v-once控制的标签只能被赋值一次-->
            <p v-once>{{msg}}</p>
        </div>
    </body>
    <script src="js/Vue.js"></script>
    <script type="text/javascript">
        //指令:出现在html标签中可以被vue解析处理的全局属性
        new Vue({
            el:'#app',
            data:{
                title:'',
                msg:'message'
            }
        })
    </script>
    </html>
    

    5.v-cloak

    • 解决页面闪烁
    <style>
        [v-cloak] {
            display: none;
        }
    </style>
    <div id="app" v-cloak>
        
    </div>
    
     也可以将导入Vue的语句放在上面来避免页面闪烁 不过不推荐这样做
    <script src="js/Vue.js"></script>
        <style type="text/css">
            [v-cloak]{
                /*display: none;*/
            }
        </style>
    </head>
    <body>
    <div id="app" v-cloak>
        {{ msg }}
    </div>
    </body>
    <!--<script src="js/Vue.js"></script>-->
    <script type="text/javascript">
    
    new Vue({
            el:'#app',
            data:{
                msg:'message'
            }
        })
    </script>
    

    二.关键指令

    1.v-bind

    操作的是属性,绑定属性后,属性值可以由变量来控制
    操作title
    v-bind:title="'my_title'"  => title="my_title"
    
    v-bind:title="title"
    data: {
    	title: "my_title"
    }
    => title="my_title"
    
    操作class
    v-bind:class="my_class"
    data: {
    	my_class: active
    }
    => class="active"
    
    v-bind:class="[c1, c2]"
    data: {
    	c1: C1,
    	c2: C2
    }
    => class="C1 C2"
    
    v-bind:class="{abc: abc_able}"
    data: {
    	abc_able: ture
    }
    => class="abc"
    data: {
    	abc_able: false
    }
    => class=""
    
    操作style
    :style="{'200px', height:'200px'}"
    
    :style="my_style"
    data: {
    	my_style: {
    		 "200px",
    		height: "200px"
    	}
    }
    
    
    课堂案例
    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            .abc{
                background-color: red;
            }
        </style>
    </head>
    <body>
    <div id="app">
        <!--v-bind:-->
        <!--该指令绑定的是属性(html标签的全局属性)-->
        <!--绑定后的属性的属性值可以由变量控制-->
        <p v-bind:abc="abc"></p>
    
        <!--绑定后操作单一变量-->
        <p v-bind:title="t1">[1p1p1p1p1p</p>
        <!--绑定后,操作普通字字符串-->
        <p v-bind:title="t2">[2p2p2p2p2p2p2p</p>
    
        <!--多类名,单一变量操作-->
        <p v-bind:class="t3">p3p3p3p3p3</p>
        <p v-bind:class="[t4,tt4]">p4p4p4p4p4</p>
    
        <!-- 绑定class的{}语法 {key: value} key就是实际的类名,value是该类名的显隐(true就是起作用,false就是不起作用) -->
        <p v-bind:class="{abc: false}">p5p5p5p5p5p5</p>
        <p v-bind:class="{abc: t5}" v-on:click="fn">p5p5p5p5p5p5</p>
    
        <!--class的[]{}结合使用-->
        <!--class的值为p6 pp6,t6 tt6是值为 true|false的变量,控制p6 pp6是否起作用-->
        <p v-bind:class="[{t6:t6},{pp6:pp6}]">p6p6p6p6p6p6</p>
    
        <!--v-bind操作class-->
        <!--[a,b] a,b为变量 对其赋值的是class的具体值,如: a:active b:red=> class="active red"-->
        <!--{a:b} a为class值 b为true|false的变量,控制a的显隐,如: b:true => class='a'  b:false => class=''-->
    
        <!--v-bind:指令可以简写-->
        <p :class="'simple'">简写</p>
    
        <!-- 操作style -->
        <!-- style一般都是多条样式 -->
        <div :style="div_style"></div>
        <div :style="{ '100px', height: '100px', backgroundColor: 'blue'}"></div>
    
    </div>
    </body>
    <script src="js/Vue.js"></script>
    <script type="text/javascript">
        new Vue({
            el: '#app',
            data: {
                abc: 'ABC',
                t1: "title",
                t3: 'p3',
                p4: 'p4',
                tt4: 'pp4',
                t5:false,
                t6:true,
                tt6:true,
                div_style:{
                    '200px',
                    height:'200px',
                    backgroundColor:'pink'
                }
            },
            methods:{
                fn() {
                    this.t5 = !this.t5;
                }
            }
        })
    </script>
    </html>
    

    2.v-on指令

    1.简写 v-on:click <=> @click
    2.默认绑定 @click="fn" => 回调方法可以获取ev
    3.带参绑定 @click="fn(10)" => 回调参数只能获取自定义参数10
    4.带参绑定 @click="fn(10, $event)" => 回调参数可以获取自定义参数10即事件参数ev
    
    <div id="app">
        <p @click="fn1"></p>
        <p @click="fn2"></p>
        <p @click="fn3(10)"></p>
        <p @click="fn4($event, 10, 20)"></p>
        <p @click="fn5(10, $event, 20)"></p>
    </div>
    <script type="text/javascript">
    	new Vue({
    		el: "#app",
    		methods: {
    			fn1: function () {
    				console.log("click event");
    			},
    			fn2 (ev) {
    				console.log(ev);
    			},
    			fn3 (num) {
    				console.log(num);
    			},
    			fn4 (ev, n1, n2) {
    				console.log(ev);
    				console.log(n1);
    				console.log(n2);
    			},
    			fn5 (n1, ev, n2) {
    				console.log(ev);
    			}
    		}
    	})
    </script>
    
    课堂案例
    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            p{
                 100px;
                height: 100px;
                background-color: orange;
            }
        </style>
    </head>
    <body>
        <div id="app">
            <!--v-on指令-->
            <!--简写: @ -->
            <!--绑定的是事件,操作的是事件对应的方法名-->
            <p @click="fn"></p>
            <!--直接绑定方法名,不会携带自定义参数,但回调时能取到事件参数ev-->
            <p @click="fn2"></p>
            <!--带()的方法绑定,只传自定义参数,回调时只能取到自定义参数,事件参数ev丢失-->
            <p @click="fn3(10)"></p>
            <!--带()的方法绑定,传入自定义参数同时,显式传入事件$event,回调时可以取到自定义参数及事件参数ev-->
            <p @click="fn4($event,10,20)"></p>
            <p @click="fn5(10,$event,20)"></p>
        </div>
    </body>
    <script src="js/Vue.js"></script>
    <script type="text/javascript">
        new Vue({
            el:'#app',
            methods:{
                fn:function () {
                    console.log('click fn')
                },
                fn2(ev){
                    console.log(ev);
                },
                fn3(num){
                    console.log(num)
                },
                fn4(ev,n1,n2){
                    console.log(ev);
                    console.log(n1);
                    console.log(n2);
                },
                fn5(n1,ev,n2){
                    console.log(ev);
                }
            }
        })
    </script>
    </html>
    

    3.v-model指令

    • 操作的是表单元素的value值
    // 双向绑定
    <input type="text" v-model="val" name="txt1">
    <input type="text" v-model="val" name="txt2">
    // 两个输入框绑定的是同一个val,那么其中一个input的内容改变会直接映射到另一个input上
    
    // 单个复选框
    // val默认为true(选框选中,提交给后台的为ck=on)
    // val默认为false(选框未选中,不向后台提交该数据)
    <input type="checkbox" v-model="val" name="ck">
    
    // 多个复选框
    // v-model绑定的是同一个变量
    // 该变量的值为数组形式
    // 出现在数组中的value对应的复选框默认为选中状态,eg: val: ['ppqiu', 'zqiu'] => 乒乓球,足球复选框默认选中
    // 提交给后台数据: ck=ppqiu&ck=zqiu
    篮球<input type="checkbox" value="lqiu" v-model="val" name="ck">
    足球<input type="checkbox" value="zqiu" v-model="val" name="ck">
    乒乓球<input type="checkbox" value="ppqiu" v-model="val" name="ck">
    
    // 多个单选框
    // v-model绑定的是同一个变量
    // 该变量的值为每个单选框的value值,那么该单选框默认选中 eg: val: famale => 女单选框默认选中
    // 提交给后台数据: sex=famale
    男:<input type="radio" value="male" v-model="val" name="sex">
    女:<input type="radio" value="famale" v-model="val" name="sex">
    
    课堂案例
    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <form action="">
            <!-- 数据的双向绑定 -->
            <!-- v-model 绑定的是value,所以省略 -->
            <input type="text" v-model="val">
            <textarea v-model="val"></textarea>
            <p v-text="val"></p>
            <!--单一复选框-->
            <!--val2值为true|false的变量,控制单选框是否被选中-->
            <input type="checkbox" v-model="val2" name="ck1">
            <!--val3值为自定义“选中|未选中”控制单选框是否被选中-->
            <!--选中状态,提交给后台可以对应的value为on,为选中状态,不向后台提交value值-->
            <input type="checkbox" v-model="val3" true-value="选中" false-value="未选中" name="ck2">
            <!--多复选框-->
            <!--多个复选框的v-model绑定一个变量,该变量为数组数据,存放的是复选框的value值(value值必须明确)-->
            <!--出现在数组中的value值对应的复选框默认为选中状态-->
            <div>
                篮球<input type="checkbox" value="lq" v-model="val4" name="ck3">
                足球<input type="checkbox" value="zq" v-model="val4" name="ck3">
                乒乓球<input type="checkbox" value="bbq" v-model="val4" name="ck3">
            </div>
    
            <!--多单选框-->
            <!--多个单选框的v-model绑定一个变量-->
            <!--变量值为多个单选框中一个的value值,则该单选框为默认选中状态-->
            <div>
                男<input type="radio" value="man" v-model="val5" name="sex">
                女<input type="radio" value="woman" v-model="val5" name="sex">
            </div>
            <button type="submit">提交</button>
        </form>
    </div>
    </body>
    <script src="js/Vue.js"></script>
    <script type="text/javascript">
        new Vue({
            el:'#app',
            data:{
                val:'',
                val2:false,
                val3:'选中',
                val4:[],
                val5:'man',
            }
        })
    </script>
    </html>
    

    三.条件渲染指令

    • v-show
    <div v-show="isShow"></div>
    
    // 变量isShow值为true(显示,display: block)|false(隐藏,display: none)
    
    • v-if
    <div v-if="isShow"></div>
    
    // 变量isShow值为true(显示,渲染到页面)|false(隐藏,不渲染到页面)
    
    • v-if v-else-if v-else
    <div v-if="tag == 0" key="0"></div>
    <div v-else-if="tag == 1" key="1"></div>
    <div v-else="tag == 2" key="2"></div> 
    
    // v-else逻辑可言省略
    // 变量tag取值在0~2之间,可以决定具体渲染那个div
    // 全局属性key是为渲染过的分支建立缓存,加快该分支下一次被渲染的速度,key的值具有唯一性
    
    课堂案例
    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            .box {
                 200px;
                height: 200px;
            }
            .r {
                background-color: red;
            }
    
            .or {
                background-color: orange;
            }
            [v-cloak] {
                display: none;
            }
        </style>
        <style type="text/css">
            ul {
                margin: 0;
                padding: 0;
                list-style: none;
            }
            .wrap {
                 500px;
                height: 300px;
            }
            .main {
                 500px;
                height: 300px;
            }
            li {
                float: left;
                background-color: #666;
                margin-right: 20px;
            }
            ul:after {
                content: '';
                display: block;
                clear: both;
            }
            .red {
                background-color: red;
            }
            .green {
                background-color: green;
            }
            .blue {
                background-color: blue;
            }
        </style>
    </head>
    <body>
    <div id="app" v-cloak>
        <button @click="toggle">显隐切换</button>
        <!--v-if-->
        <div class="box r" v-if="isShow"></div>
        <!-- v-show -->
        <div class="box or" v-show="isShow"></div>
        <!-- 1.条件渲染的值为true|false -->
        <!--2.true代表标签显示方式渲染-->
        <!--3.false v-if不渲染到页面,v-show以display:none渲染到页面,但也不会显示-->
    
        <!-- v-if v-else-if v-else -->
        <ul>
            <li @mouseover="change(0)">red</li>
            <li @mouseover="change(1)">green</li>
            <li @mouseover="change(2)">blue</li>
        </ul>
        <!--red页面逻辑结构-->
        <div class="wrap red" v-if="tag==0" key="0"></div>
        <!--green页面逻辑结构-->
        <div class="wrap green" v-else-if="tag==1" key="1"></div>
        <!--blue页面逻辑结构-->
        <div class="wrap blue" v-else="tag==2" key="2"></div>
    
        <!-- v-show -->
        <ul>
            <li @mouseover="changeMain(0)">red</li>
            <li @mouseover="changeMain(1)">green</li>
            <li @mouseover="changeMain(2)">blue</li>
        </ul>
        <div class="main red" v-show="whoShow(0)"></div>
        <div class="main green" v-show="whoShow(1)"></div>
        <div class="main blue" v-show="whoShow(2)"></div>
    </div>
    </body>
    <script src="js/Vue.js"></script>
    <script type="text/javascript">
        new Vue({
            el: '#app',
            data: {
                isShow: false,
                tag:0,
                flag:0
            },
            methods: {
                toggle() {
                    this.isShow = !this.isShow;
                },
                change(num) {
                    this.tag = num
                },
                changeMain(num){
                    this.flag=num
                },
                whoShow(num){
                    return this.flag == num;
                }
            }
        })
    </script>
    </html>
    

    四.列表渲染指令

    • v-for 遍历数组[]
    <ul>
        <li v-for="(n, i) in list" :key="i">value:{{ n }} | index: {{ i }}</li>
    </ul>
    // list为提供的数组数据
    // n为遍历的数组元素值,i为遍历的元素索引
    // key是为遍历建立缓存,采用变量赋值,所以通过v-bind:指令操作
    <script>
    new Vue({
        el: "#app",
        data: {
            list: [1, 2, 3, 4, 5],
        }
    })
    </script>
    
    • v-for变量对象{}
    <ul>
        <li v-for="(v, k, i) in dic" :key="k">value:{{ v }} | key:{{ k }} | index: {{ i }}</li>
    </ul>
    // dic为提供的对象(字典)数据
    // v为遍历的对象值,k为对象值的键,i为对象值的索引
    // key是为遍历建立缓存,采用变量赋值,所以通过v-bind:指令操作
    <script>
    new Vue({
        el: "#app",
        data: {
            dic: {
                name: '张三',
                age: 18,
                gender: '男'
            }
        }
    })
    </script>
    
    • 遍历的嵌套
    <div v-for="(person, index) in persons" :key="index" style="height: 21px;">
        <div v-for="(v, k) in person" :key="k" style="float: left;">{{ k }} : {{ v }}&nbsp;&nbsp;&nbsp;</div>
    </div>
    
    <script>
    new Vue({
        el: "#app",
        data: {
            persons: [
                {name: "zero", age: 8},
                {name: "egon", age: 78},
                {name: "liuXX", age: 77},
                {name: "yXX", age: 38}
            ]
        }
    })
    </script>
    
    课堂案例
    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            [v-cloak] {
                display: none;
            }
        </style>
    </head>
    <body>
    <div id="app" v-cloak>
        <h1>{{msg}}</h1>
        <!--v-for="item in items"-->
        <!--遍历的对象:数组[] 对象(字典){}-->
        <ul>
            <li>{{list[0]}}</li>
            <li>{{list[1]}}</li>
            <li>{{list[2]}}</li>
            <li>{{list[3]}}</li>
            <li>{{list[4]}}</li>
        </ul>
    
        <!-- n为遍历的结果值 -->
        <ul>
            <li v-for="n in list">{{n}}</li>
        </ul>
        <!-- 一般列表渲染需要建立缓存
        <!--列表渲染是循环,需要赋值变量给key所以key需要v-bind指令处理-->
        <!-- v-for遍历数组[]时,接受两个值时,第一个为元素值,第二个为元素索引-->
        <ul>
            <li v-for="(n,i) in list" :key="i">value:{{n}}  index:{{i}}</li>
        </ul>
    
        <ul>
            <li>{{dic['name']}}</li>
            <li>{{dic['age']}}</li>
            <li>{{dic['gender']}}</li>
        </ul>
        <!-- v-for遍历对象[]时,接受三个值时,第一个为元素值,第二个为键,第三个为元素索引-->
        <ul>
            <li v-for="(v,k,i) in dic">value:{{v}} key:{{k}} index:{{i}}</li>
        </ul>
    
        <!--遍历的嵌套-->
        <ul>
            <li v-for="(person,index) in persons" :key="index">
                <div v-for="(v,k) in person" :key="k" style="float: left">{{k}}:{{v}} &nbsp;&nbsp;&nbsp;&nbsp;</div>
            </li>
        </ul>
    
    </div>
    </body>
    <script src="js/Vue.js"></script>
    <script type="text/javascript">
        new Vue({
            el: '#app',
            data: {
                msg: '常威打来福,一个愿打一个愿挨',
                list: [1, 2, 3, 4, 5],
                dic: {
                    name: 'changwei',
                    age: 88,
                    gender: '???',
                },
                persons:[
                    {name:'zero',age:56},
                    {name:'egon',age:78},
                    {name:'yyh',age:58}
                ]
            },
        })
    </script>
    </html>
    

    todolist案例

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            [v-cloak] {
                display: none;
            }
        </style>
    </head>
    <body>
    <div id="app" v-cloak>
        <div>
            <input type="text" v-model="val">
            <button type="button" @click="submitMsg">提交</button>
        </div>
        <ul>
            <li v-for="(v,i) in list" :key="i" @click="removeMsg(i)">{{v}}</li>
        </ul>
    </div>
    </body>
    <script src="js/Vue.js"></script>
    <script type="text/javascript">
        new Vue({
            el: '#app',
            data: {
                val: '',
                list: []
            },
            methods: {
                submitMsg() {
                    //往list中添加input框中的value
                    if (this.val) {
                        this.list.push(this.val);
                        this.val=''
                    }
                },
                removeMsg(index){
                    this.list.splice(index,1)
                }
            }
        })
    </script>
    </html>
    
  • 相关阅读:
    linux设置定时任务的方法(自己总结)
    SecureCRT上传和下载文件
    ajax上传文件类型
    分页业务逻辑
    $.load
    数组中多条对象去重方式
    jquery cookie
    鼠标滚轮事件(浏览器兼容性写法)
    用cookie保存用户的登录信息,规定保存的期限
    获取url参数值
  • 原文地址:https://www.cnblogs.com/layerluo/p/9873358.html
Copyright © 2020-2023  润新知