vue指令学习笔记(一)

120 阅读5分钟

1.v-once

让界面不要跟着数据变化,组件和元素只渲染一次

<!--这里就是MVVM中的View-->
<div id="app">
    <p v-once>原始数据: {{ name }}</p>
    <p>当前数据: {{ name }}</p>
</div>
<script>
    // 这里就是MVVM中的View Model
    let vue = new Vue({
        el: '#app',
        data: {
            name: "李",
        }
    });
</script>

2.v-cloak

  • 数据渲染之后自动显示元素
  • 类似于利用v-cloak配合 [v-cloak]:{display: none}默认先隐藏未渲染的界面
<div id="app">
    <p v-cloak>{{ name }}</p>
</div>
<script src="js/vue.js"></script>
<script>
// 这里就是MVVM中的View Model
    let vue = new Vue({
        el: '#app',
        data: {
            name: "李",
        }
    });
</script>

3.v-text

插值方式,不会解析html文本,会覆盖原有的内容

<!--v-text的方式: 也不会解析HTML-->
<p v-text="msg">++++++++</p>

<script>
    let vue = new Vue({
        el: '#app',
        data: {
            name: "李",
            msg: "<span>我是span</span>"
        }
    });
</script>

4.v-html

插值方式,会解析html文本,会覆盖原有内容,类似于innerHTML

<!--v-html的方式: 会覆盖原有的内容-->
<p v-html="name">++++++++</p>
<!--v-html的方式:会解析HTML-->
<p v-html="msg">++++++++</p>

<script>
    let vue = new Vue({
        el: '#app',
        data: {
            name: "李",
            msg: "<span>我是span</span>"
        }
    });
</script>

5.v-if

  • 条件渲染:如果为true,则会渲染元素,反之;
  • 特点:条件不满足不会创建这个元素;
  • v-if可以从模型中获取数据,v-if也可以直接赋值一个表达式;
  • v-else指令可以和v-if指令配合使用,当v-if不满足条件时就执行v-else就显示v-else中的内容;
  • v-else-if可以和v-if指令配合使用, 当v-if不满足条件时就依次执行后续v-else-if, 哪个满足就显示哪个
<div id="app">
    <!--<p v-if="show">我是true</p>-->
    <!--<p v-if="hidden">我是false</p>-->
    <!--<p v-if="true">我是true</p>-->
    <!--<p v-if="false">我是false</p>-->
    <!--<p v-if="age >= 18">我是true</p>-->
    <!--<p v-if="age < 18">我是false</p>-->
    <!--<p v-if="age >= 18">成年人</p>-->
    <!--<p>中间的内容</p>-->
    <!--<p v-else>未成年人</p>-->
    <p v-if="score >= 80">优秀</p>
    <p v-else-if="score >= 60">良好</p>
    <p v-else>差</p>
</div>

<script>
    let vue = new Vue({
        el: '#app',
        data: {
            show: true,
            hidden: false,
            age: 17,
            score: 50
        }
    });
</script>

6.v-show

  • v-show和v-if的能够一样都是条件渲染, 取值为true就显示, 取值为false就不显示
  • 区别:
  1. v-if: 只要取值为false就不会创建元素
  2. v-show: 哪怕取值为false也会创建元素, 只是如果取值是false会设置元素的display为none
<div id="app">
    <p v-show="show">我是段落1</p>
    <p v-show="hidden">我是段落2</p>
</div>

<script>
    let vue = new Vue({
        el: '#app',
        data: {
            show: true,
            hidden: false,
            age: 18
        }
    });
</script>

7.v-for

相当于js中的for循环

<body>
    <!-- mvvm中的view -->
    <div id="app">
        <ul>
            <li v-for="(value,index) in list">{{index}}</li>
        </ul>
        <ul>
            <li v-for = "(value,key) in student">{{key}}---------{{value}}</li>
        </ul>
    </div>
</body>
<script>
    let vue = new Vue({
        el: '#app',
        data: {
            list: ["张三","里斯","王五","赵六"],
            student:{
                name:"小明",
                age:18,
                adress:"sehngzheng"
            }
        }
    })
</script>

8.v-bind

给任意标签的任意属性绑定数据

<input type="text" v-bind:value = "inputVaule">
<!-- v-bind可以省略 -->
<input type="text" :value = "inputVaule">
<!-- 可以绑定合法的js表达式 -->
<input type="text" :value = "student.age + 1">

绑定类名

<!-- 将类名放到数组中,还需要利用引号将类名括起来才会去style中查找 -->
<p :class="['color','size']">锻炼测试</p>
<!-- 支持三目运算符 -->
<p :class="['color',flag ? 'active' : '','size']">锻炼测试</p>
<!-- 可通过对象决定是否需要绑定 -->
<p :class="['color',{'active' : false}]">锻炼测试</p>
<p :class="obj">对象绑定测试</p>

绑定样式

<!-- 样式绑定 -->
<p :style="{color: 'royalblue', 'background-color': 'seagreen'}">我是样式绑定测试</p>
<!-- 绑定样式对象 -->
<p :style="styleObj">我是样式绑定测试</p>
<!-- 绑定多个样式对象 -->
<p :style="[styleObj,styleObj2]">我是样式绑定测试</p>

9.v-on

  • 指定事件名称的时候不需要写on
  • 复制的时候必须赋值一个回调函数的名称
<button v-on:click = "onClick">点我有惊喜</button>
<button @click = "onClick">@@@点我有惊喜</button>

常见修饰符:

<!-- once:事件指挥触发一次 -->
<button v-on:click.once = "onClick">once</button>
<!--.prevent 调用 event.preventDefault() 阻止默认行为 -->
<a href="http://www.baidu.com" v-on:click.prevent = "onClick">a 标签prevent</a>
<!--.stop 阻止事件冒泡 -->
<div class="a" @click = "aClick">
    <div class="b" @click.stop = "bClick">
        <div class="c" @click.stop = "cClick"> </div>
    </div>
</div>
<!-- 如果想让回调函数只有当前元素触发,那么可以使用.self -->
<div class="a" @click = "aClick">
    <div class="b" @click.self = "bClick">
        <div class="c" @click = "cClick"> </div>
    </div>
</div>

<!-- 默认情况事件冒泡,如果想变成事件捕获,那么就需要使用.capture -->
<div class="a" @click.capture = "aClick">
    <div class="b" @click.capture = "bClick">
        <div class="c" @click.capture = "cClick"> </div>
    </div>
</div>

按键修饰符

<!-- 按键修饰符 -->
<input type="text" @keyup.f2 = "cClick">
<!-- 自定义按键修饰符 -->
<!-- Vue.config.keyCodes.f2 = 112 -->

10.自定义全局指令

<!-- 自定义全局指令 -->
<p v-color>自定义指令的使用测试</p>
<input type="text" v-focus>

/*
参数一:指令名称
参数二:对象
指令可以在不同的生命周期执行
bind: 指令bind到元素上的时候执行
inserted:元素被添加到父元素的时候执行
*/
Vue.directive("color",{
    //el就是被绑定的元素
    bind:function(el){
        el.style.color = 'red';
    }
});
Vue.directive("focus",{
    //el就是被绑定的元素
    inserted:function(el){
        el.focus();
    }
})

<!-- 自定义指令传参 -->
<p v-color = "'green'">自定义指令的使用测试</p>

 Vue.directive("color",{
    //el就是被绑定的元素
    bind:function(el,obj){
        el.style.color = obj.value;
    }
});

11.自定义局部指令

let vue = new Vue({
    el: '#app',
    data: {},
    methods:{},
    directives:{
        "color":{
            bind:function(el,obj){
                el.style.color = obj.value;
            }
        }
    }
})