二、Vue指令

一、文本指令

1. v-text

    不能解析html语法的文本,会原样实处。

2. v-html

    不能解析html语法的文本。

3. v-once

    处理的标签的内容只能被解析一次。

    <p v-on:click="pClick" v-once>{{ msg }}</p>

二、事件指令

1. 语法
        
    v-on:事件名=‘方法变量’
       
    @事件名=‘方法变量’


2. 同一标签绑定多个事件

    鼠标事件示例

    <body>
    <div id="app">
        <p @mouseover="f1" @mouseout="f2">{{ action }}</p>
    </div>
    </body>
    
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
    
            data: {
                action: '鼠标事件'
            },
    
            methods:{
                f1 () {
                    this.action = '悬浮';
                    console.log('aaaaaaaa')
                },
                f2 () {
                    this.action = '离开'
                },
            }
        })
    </script>


3. 给绑定事件传参

    a. 不加括号默认传事件对象:$event
    
    b. 加括号表示自己传参,系统不自动传事件对象,可以手动传入事件。

        <p @click="f1($event, 'a')">{{ action }}</p>

三、属性指令

1. 语法
        
    v-bind:属性名=‘变量’
       
    :属性名=‘变量’



2. class属性绑定方法


    a. 变量的值就是类名
        
        <p :class="c1"></p>
    
    b. 多类名可以用[ ],采用多个变量来控制
    
        <p :class="[c1, c2]"></p>
    
    c. 选择器可设置为常量
    
        <p :class="['d1', c3]"></p>
        
    d. {类名:布尔值}控制某类名是否起作用
    
        <p :class="['d1', {d2: is_true}]"></p
    
    
3. 调整class属性示例
    
    ><head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .d1 {
                width: 200px;
                height: 200px;
                background-color: orange;
            }
            .d2 {
                border-radius: 50%;
            }
            .d3 {
                border-radius: 20%;
            }
        </style>
    </head>
    <body>
    <div id="app">
    
        <p :class="c1"></p>
        <p :class="[c1, c2]"></p>
        <p :class="['d1', c3]"></p>
        <p :class="['d1', {d2: is_true}]" @click="is_true = !is_true"></p>
    
    </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                c1: 'd1',
                c2: 'd2',
                c3: 'd3',
                is_true: 0,
            }
        })
    </script>
    
    
4. style属性绑定方式1

    <body>
    <div id="app">
    
        <p :style="myStyle">样式属性</p>
    
    </div>
    </body>
    
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                myStyle: {
                    width: '100px',
                    height: '100px',
                    backgroundColor: 'red'
                }
            }
        })
    </script>
    
    
5. style属性绑定方式2

    <body>
    
    <div id="app">
    
        <p :style="{width: w, height: h, backgroundColor: bgc}">样式属性</p>
    
    </div>
    </body>
    
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                w: '100px',
                h: '100px',
                bgc: 'red'
            }
        })
    </script>

四、表单指令

1. 语法
        
    v-model=‘变量’


2. 特点

    a. v-model可实现数据的双向绑定,v-model绑定的变量值可以影响表单标签的值,
    反过来单标签的值也可以影响变量的值。
    
    b. 在选择框中,v-model能确定选择的初始值。
    
    
3. v-model关联input框

    <body>
    <div id="app">
    
        <input type="text" :value="v1"  v-model="v1">
        <input type="text" :value="v1">
        {{ v1 }}
    
    </div>
    </body>
    
    <script src="js/vue.js"></script>
    
    <script>
        new Vue({
            el: '#app',
            data: {
                v1: '123'
            }
        })
    </script>
    

4. 在单选框中的应用(value)
    
    <body>
    <div id="app">
        <form action="">
        男:<input type="radio" name="sex" value="male" v-model="v1">
        女:<input type="radio" name="sex" value="female" v-model="v1">
        {{ v1 }}
        <hr>
        <input type="submit" >
    </form>
    </div>
    </body>
    
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                v1: 'male',
            }
        })
    </script>


5. 在单一复选框中的应用(布尔值)

    <body>
    <div id="app">
        <form action="">
            卖身契:同意 <input type="checkbox" name="agree" v-model="v1">
            <hr>
            <button type="submit">提交</button>
        </form>
    </div>
    </body>
    
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                v1: true,
            }
        })
    </script>
    

6. 在多复选框中的应用(数组)

    <body>
    <div id="app">
        <form action="">
            性别:<br>
            男:<input type="checkbox"  name="gender" value="male" v-model="v1">
            女:<input type="checkbox"  name="gender" value="female" v-model="v1">
            其他:<input type="checkbox"  name="gender" value="other" v-model="v1">
            {{ v1 }}
        </form>
    </div>
    </body>
    
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                v1: ['male'],
            }
        })
    </script>

五、条件指令

1. 语法
        
    a. v-show=‘布尔变量’
    
    b. v-if=‘布尔变量’ 
    
    
2. 特点

    a. 用v-show隐藏时,采用display:none进行渲染。
    
    b. 用v-if隐藏时,不在页面中渲染。


3. 修改v-if参数调整显示的内容

    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            [v-vloak] {display: none;}
            .box {
                width: 200px;
                height: 200px;
            }
            .r{background-color: red}
            .b{background-color: blue}
            .g{background-color: green}
    
        </style>
    </head>
    <body>
    <div id="app" v-cloak>
    
        <div class="wrap">
            <div class="box r" v-if="0"></div>
            <div class="box b" v-else-if="0"></div>
            <div class="box g" v-else></div>
        </div>
    
    
    </div>
    </body>
    
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                is_show: true,
            }
        })
    </script>
    
    
4. 用button按钮选择颜色

    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            [v-cloak] { display: none; }
    
            .box {
                width: 200px;
                height: 200px;
            }
            .r {background-color: red}
            .b {background-color: blue}
            .g {background-color: green}
    
            .active {
                background-color: deeppink;
            }
        </style>
    </head>
    
    <body>
        <div id="app" v-cloak>
            
            <div class="wrap">
                <div>
                    <button @click="page='r_page'" :class="{active: page === 'r_page'}">红</button>
                    <button @click="page='b_page'" :class="{active: page === 'b_page'}">蓝</button>
                    <button @click="page='g_page'" :class="{active: page === 'g_page'}">绿</button>
                </div>
                <div class="box r" v-if="page === 'r_page'"></div>
                <div class="box b" v-else-if="page === 'b_page'"></div>
                <div class="box g" v-else></div>
            </div>
        </div>
    </body>
    
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                page: 'r_page'
            }
        })
    </script>

六、循环指令

1. 语法
        
    v-for='ele in string|array|obj'
    
    
2. 遍历字符串、数组及对象

    <body>
    <div id="app">
        <i v-for="(c, i) in info">{{ i }}: {{ c }}<br> </i>
        <hr>
        <div v-for="e in stus">{{ e }}</div>
        <hr>
        <div v-for="v in people">{{ v }}</div>
        <hr>
        <div v-for="(v, k, i) in people">{{ i }}-{{ k }}: {{ v }}</div>
        <hr>
    
    </div>
    </body>
    
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                info: 'good good study',
                stus: ['aaa', 'bbb', 'ccc'],
                people: {
                    name: 'byx',
                    age: 18,
                    gender: 'male'
                }
            }
        })
    </script>



3. for循环嵌套

    <body>
    <div id="app">
        <div v-for="stu in student">
            <span v-for="(v, k, i) in stu"><span v-if="i !== 0"> | </span>{{ k }}:{{ v }}</span>
        </div>
    </div>
    </body>
    
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                student: [
                    {
                        name: 'a',
                        age: 16,
                        gender: 'female'
                    },
                    {
                        name: 'b',
                        age: 17,
                        gender: 'female'
                    },
                    {
                        name: 'c',
                        age: 18,
                        gender: 'male'
                    }
                ]
            }
        })
    </script>

猜你喜欢

转载自www.cnblogs.com/binyuanxiang/p/12057687.html