学习笔记Vue(二)—— 常用指令

1.v-pre

让标签中的html模板不进行编译,就是两个花括号中的内容不再当作一个变量,而是整体就看做是一个字符串。

	<!-- v-pre 不编译两个花括号中的内容 -->
	<span v-pre>{{'a'}}</span>

2.v-cloak

有的时候可能由于网络原因,vue加载的比较慢,最开始html里绑定的数据是不存在的,等待vue加载完毕后才显示出来,这样就会有一个“闪现”行为,可以使用v-cloak解决
css中设置v-cloak 为display:none

[v-cloak]{
            display: none;
        }
    <!-- 防止改变元素值时 “闪现” -->
    <span v-cloak>{{name}}</span>

3.v-once

v-once 控制该标签内的html模板,只显示第一次的值,不会再被改变

<body>
	<!-- 始终显示第一次的值,不再更改 -->
  	<span v-once>{{name}}</span>
	<script>
	    var vm = new Vue({
	        el: '#app',
	        data: {
	            name: 'grandma',
	        }
	    });
	    vm.name = 'kkk';  //虽然改成了kkk,但span里仍显示 grandma
    </script>
</body>

4.v-html

绑定含有html的字符串,但要注意XSS攻击
XSS攻击:别人恶意的把你的html字符串修改成他的版本,渲染到界面执行

<body>
	<!-- 绑定html字符串   注意XSS攻击-->
    <span v-html = 'dom'></span>
    <script>
	    var vm = new Vue({
	        el: '#app',
	        data: {
	            dom: '<div><h4>Hello World</h4></div>',
	        }
	    });
    </script>
</body>

5.v-text

绑定text,会覆盖标签里的全部内容

6.v-if

v-if等于一个布尔值,可以是变量或者函数的返回值,true则增加这段dom,false则移除,
注意与v-show区分,v-show是dom本来就存在,只是没有显示,v-if是不存在,后添加上的dom
使用template标签,控制多个标签的显示和隐藏会更好,template标签不会出现在dom结构里

<body>
	<!-- v-if  同 ng-if -->
    <template v-if='isTrue'>
            <div>
                <h1>用template控制多个标签的显示和隐藏</h1>
                <span>hahahhhahahahha</span>
            </div>
    </template>
    <script>
	    var vm = new Vue({
	        el: '#app',
	        data: {
	            isTrue :true
	        }
	    });
    </script>
</body>

7.v-else

v-else 必须和v-if搭配使用,中间不能有“第三者”,当if里的值为false时,v-else执行

8.v-show

用法和v-if相似,但在template标签上v-show不生效

9.v-bind

v-bind是一个强大的指令,他可以绑定属性的值,使这个属性的值可以由你改编成任何你想要的值。
简写: :class=’’ :src=’’
比如:

<body>
    <div id="app">
        <img v-bind:src="imgUrl" />
        <!-- v-bind 简写  只剩一个:   绑定多个class值,要写在数组里 -->
        <img :src="imgUrl" alt="" :class="[redClass, blueClass]"/>
        <!-- flag为true,则有yellow类名,否则没有 -->
        <div :class="{yellow: flag}"></div>
        <div :style="{color:color,background:'blue',width:'100px',height:'100px'}">redword</div>
	</div>
    <script>
        var vm = new Vue({
            el: "#app",
            data: {
             	imgUrl:"http://pic.58pic.com/58pic/13/93/09/83F58PICUiG_1024.jpg",
                redClass: "red",
                blueClass: "blue",
                flag: true,
                color: 'red',
                divColor:'red'
            }
        })

10.v-on

v-on 给标签绑定事件,如click事件
简写,@click = “fun()”

<body>
    <div id="app">
        <button v-on:click="change('red')">red</button>
        <button v-on:click="change('green')">green</button>
        <button @click="change('blue')">blue</button>
    </div>
    <script>
        var vm = new Vue({
            el: "#app",
            data: {
                imgUrl:"http://pic.58pic.com/58pic/13/93/09/83F58PICUiG_1024.jpg",
                redClass: "red",
                blueClass: "blue",
                flag: true,
                color: 'red',
                divColor:'red'
            },
            methods: {
                change(color){
                    // this 相当于vm    如果写箭头函数,this就是window了! 不要随便用箭头函数
                    this.divColor = color;
                }
            }
        })
    </script>
</body>

11.v-for

类似angular的v-repeat,可以循环生成很多相同结构的html标签
可以绑定一个key值,key值必须唯一
但如果使用template标签,template标签上不能使用key值

<body>
    <!-- v-for  同 ng-repeat-->
    <!-- key值必须是唯一的 -->
    <div id="app">
        <div v-for="(item, index) in personArr" :key="item.id">{{item.name}}</div>
        <div v-for="(value,key) in person">{{value}}</div>
        <div v-for="v in 8">{{v}}</div>
        <div v-for="v in 'abscdsd'">{{v}}</div>

        <!-- template 不能写key值 -->
        <template v-for="(item, index) in arr"> 
            
        </template>
    </div>
    <script>
        var vm = new Vue({
            el: "#app",
            data:{
                arr:[1, 2, 3],
                personArr:[
                    {
                        id: '12321',
                        name: 'cg'
                    },
                    {
                        id: '22321',
                        name: 'ctg'
                    },
                    {
                        id:'11111',
                        name: 'dg'
                    }
                ],
                person: {
                    name:'zml',
                    age:'18',
                    height:'175'
                }
            }
        });

    </script>
</body>

12.v-model (双向数据绑定)

视图改变,vue中变量的值也改变,
变量值改变,视图也会改变

<body>
    <!-- v-model 双向数据绑定 value 和 input的语法糖 -->
    <div id="app">
        <input type="text" v-model="content">
        <span>{{content}}</span>
    </div>
    <script>
        var vm = new Vue({
            el: "#app",
            data: {
                content: 'abcdef'
            }
        });
    </script>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值