美文网首页
vue的指令

vue的指令

作者: alicemum | 来源:发表于2021-03-04 14:38 被阅读0次

    官网:

    https://cn.vuejs.org/

    vue的模板渲染指令

    1. {{}}插值表达式

    <h1>{{msg}}</h1>
    

    2. v-html

    <!-- ""中是js表达式 -->
    <h1 v-html="msg + 1"></h1>
    <h1 v-html="'msg'"></h1>
    
    

    3. v-text

    不能解析html标签

    <h1 v-text="<em>111</em>"></h1>
    

    4. v-bind

    绑定动态属性
    v-bind:src 等价 :src

    <img v-bind:src="'./img/' + imgUrl" alt="" v-on:click="changeUrl">
    <img :src="'./img/' + imgUrl" alt="" v-on:click="changeUrl">
    

    5. v-on

    绑定事件
    v-on:click 等价于 @click

    <img :src="'./img/' + imgUrl" alt="" v-on:click="changeUrl">
    <img :src="'./img/' + imgUrl" alt="" @click="changeUrl">
    ....
    <script>
    new Vue({
      methods: {
        changeUrl(){}
      }
    })
    </script>
    
    

    事件传参

    <p><button class="btn1" @click="fun1" >不传参数</button></p>
    <p><button class="btn2" @click="fun2('red',23)">传参数</button></p>
    <p><button class="btn3" @click="fun3">不传其它参数,只获取事件对象</button></p>
    <p><button class="btn4" @click="fun4('blue',$event)">传其它参数,并且获取事件对象</button></p>
    

    注意: 如果事件处理程序既要传一般参数,也要获取事件对象,事件对象要放在最后,用$event做为参数传入
    方法

    fun1(){
        console.log('fun1');
    },
    fun2(color,num){
        console.log(color,num);
    },
    fun3(e){
        // console.log(e);
        console.log(e.clientX,e.clientY);
        console.log(e.target);
    },
    
    fun4(color,e){
        console.log(e);
    },
    

    事件修饰符

    <!-- 
        事件修饰符: @click.修饰符
        1. @click.stop  阻止冒泡
        2. @click.prevent  阻止浏览器默认行为
        3. @click.once 只执行一次
        4. @keyup.键名  (13,enter都是指回车键, 38: 上箭头)
        -->
        <p @click="handlerP"><button @click.stop="handlerBtn">阻止冒泡</button></p>
        <form>
            <p>用户名:<input type="text" name="user" @keyup.enter.38="fun"></p>
            <p><button @click.prevent="addPro">提交</button></p>
        </form>
        <p><button @click.once="addPro">只执行一次</button></p>
    
    

    vue的条件渲染指令

    6. v-if

    条件为真,则渲染,条件为假,不渲染(没有生成dom对象)

    v-else

    v-if和v-else要相邻

    v-else-if

    <p><button @click="toggle()">切换显示和隐藏</button></p>
    <div class="box1 box" v-if="isShow">登录框</div>
    <div class="box2 box" v-show="isShow">登录框</div>
    
    var vm = new Vue({
        el: '#app',
        data: {
            isShow: true
        },
        methods: {
            toggle(){
                this.isShow = !this.isShow
            }
        }
    });
    

    7. v-show

    条件为真,则显示,条件为假,则隐藏(生成了dom对象,css样式为隐藏)

    <p><button @click="toggle()">切换显示和隐藏</button></p>
    <p v-if="isShow"><button>红色</button></p>
    <p v-else v-cloak><button>蓝色</button></p>
    

    vue的列表渲染指令

    8. v-for

    数据

    data: {
        list: [1, 3, 6],
        person: {
            name: "Rose",
            age: 20,
            address: 'BJ'
        },
        studentsList: [
            {
                name: "Rose1",
                age: 20,
                address: 'BJ'
            },
            {
                name: "Rose2",
                age: 20,
                address: 'BJ'
            },
            {
                name: "Rose3",
                age: 20,
                address: 'BJ'
            }
        ]
    },
    

    渲染数组

    <ul>
        <li v-for="item in list">{{item}}</li> -->
    </ul>
    <ul>
        <li v-for="(item,index) in list">{{index}}------{{item}}</li>
    </ul>
    

    渲染对象

    <ul>
        <li v-for="value in person">{{value}}------ Rose</li>
    </ul>
    <ul>
        <li v-for="(value,key) in person">{{key}}------ {{value}}</li>
    </ul>
    

    渲染数据

    <ul>
        <li v-for="(item,index) in studentsList">
            <h3>第{{index+1}}个人的数据</h3>
            <ul>
                <li v-for="(val,key) in item">{{key}}----{{val}}</li>
            </ul>
        </li>
    </ul>
    

    数组和对象的更新检测

    当数组或对象的数据更新,视图却没有触发重新渲染时,可用以下两种方法
    Vue.set()
    vm.set

    methods: {
        changeData() {
            // ====================================数组更新检测
    
            this.list.push(5)  //可以触发视图更新
            this.list[3] = 5 //不可以触发视图更新
    
            // 三个参数: 数组,索引,新值
            Vue.set(this.list,3,5)  //可以触发视图更新
            this.$set(this.list,3,5)  //可以触发视图更新
    
    
            // =====================================对象的更新检测
    
            this.person.name = "小李"; //可以触发视图更新
            this.person.sex = "男"; // 不可以触发视图更新
    
            // 三个参数:对象,属性,新值
            Vue.set(this.person,"sex","男")  //可以触发视图更新
            this.$set(this.list,3,5)  //可以触发视图更新
    
        }
    }
    

    9. v-model

    双向数据绑定,只用于表单元素,数据改变,元素的值也自动发生改变,元素的值改变,数据也随之变化

    <p>用户名: <input type="text" @keyup="addUser" v-model="user"></p>
    <p>用户名: <input type="text" @keyup.enter.38="addUser" v-model="user"></p>
    <p>{{user}}</p>
    
    var vm = new Vue({
            data: {
                user: 'hello'
            },
            methods: {
                addUser(){
                    console.log(this.user);
                }
            }
        });
    

    v-model中的user,必须是在data中注册过的数据

    相关文章

      网友评论

          本文标题:vue的指令

          本文链接:https://www.haomeiwen.com/subject/orihqltx.html