全栈之路Vue.js系列(二)之Vue.js指令

前言

在上一篇文章我们大致介绍了以下Vue.js的基本情况,其中我们简单介绍了一些Vue.js的指令,而这些指令是Vue.js的基础,今天我们就来详细了解一下Vue.js的指令。

v-once

我们之前说过Vue支持双向绑定,当我们更改数据时视图也会发生变化,v-once是用于一次性绑定,当数据第一绑定之后再更改数据视图不会变化。代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <title>Title</title>
</head>
<body>
<div id="app">
    <span v-once>{{message}}</span>
</div>
</body>
<script>
    const app = new Vue({
        el : "#app",
        data : {
           message : "从此无心爱良夜,任他明月下西樓"
        }
    });
</script>
</html>

这时打开控制台更改message数据时视图不会发生变化。

v-html

v-html是用来插入html片段,代码如下。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <title>Title</title>
</head>
<body>
<div id="app">
    <span v-html="message"></span>
</div>
</body>
<script>
    const app = new Vue({
        el : "#app",
        data : {
           message : "<h6>长恨人心不如水,等闲平地起波澜</h6>"
        }
    });
</script>
</html>

v-bind

我们可以通过v-bind绑定html的属性。代码如下通过v-bind绑定href属性。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <title>Title</title>
</head>
<body>
<div id="app">
    <a v-bind:href="url">百度</a>
</div>
</body>
<script>
    const app = new Vue({
        el : "#app",
        data : {
           url : "http://www.baidu.com"
        }
    });
</script>
</html>

v-bind可以简写为:,效果是一样的。 <a v-bind:href="url">百度</a>可以简写为 <a :href="url">百度</a>

动态绑定class

我们可以通过v-bind动态绑定class,代码如下,当isActive为true时使用就active。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <title>Title</title>
    <style>
        .active{
            font-size: 20px;
            color: red;
        }
    </style>
</head>
<body>
<div id="app">
   <p v-bind:class="{active: isActive}">纵豆蔻词工,青楼梦好,难赋深情</p>
</div>
</body>
<script>
    const app = new Vue({
        el : "#app",
        data : {
           isActive: true
        }
    });
</script>
</html>

动态绑定style

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <title>Title</title>
</head>
<body>
<div id="app">
   <p v-bind:style="objectStyle">一场寂寞凭谁诉,算前言,总轻负</p>
</div>
</body>
<script>
    const app = new Vue({
        el : "#app",
        data : {
           objectStyle :{
               fontSize: '20px',
                color: 'red',
           }
        }
    });
</script>
</html>

v-if ,v-else,v-else-if

我们可以用这三个指令进行有条件的渲染。代码如下。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <title>Title</title>
</head>
<body>
<div id="app">
  <div v-if="poet === '柳永'">衣带渐宽终不悔,为伊消得人憔悴</div>
    <div v-else-if="poet === '司马光'">相见争如不见,多情何似无情</div>
    <div v-else> 似此星辰非昨夜,为谁风露立中宵</div>
</div>
</body>
<script>
    const app = new Vue({
        el : "#app",
        data : {
           poet: "tiger"
        }
    });
</script>
</html>

v-show

v-show与v-if类似,都是控制控件显示与否,用法也类似,不同的是v-if的渲染时惰性的,当条件为false时,控件根本不会渲染,而v-show条件为false还是会渲染只是没有显示出来,如果需要频繁切换,推荐使用v-show。

v-for

我们可以用v-for来渲染一个列表,就像其他语言中的for循环。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <title>Title</title>
</head>
<body>
<div id="app">
  <ol>
      <li v-for="poet in poets" :key="poet.name">{{poet.name}}</li>
  </ol>
</div>
</body>
<script>
    const app = new Vue({
        el : "#app",
        data : {
           poets: [
               {name: "王勃"},
               {name: "骆宾王"},
               {name: "杨炯"}
           ]
        }
    });
</script>
</html>

使用V-for遍历对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <title>Title</title>
</head>
<body>
<div id="app">
    <p v-for="item in poem">{{item}}</p>
</div>
</body>
<script>
    const app = new Vue({
        el : "#app",
        data : {
           poem: {
               title: "题龙阳县青草湖",
               author: "唐珙",
               content: "西风吹老洞庭波,一夜湘君白发多。醉后不知天在水,满船清梦压清河"
           }
        }
    });
</script>
</html>

v-on

我们可以使用v-on来进行监听,响应的函数写在vue的methods中。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <title>Title</title>
</head>
<body>
<div id="app">
   <button v-on:click="say('李商隐')">李商隐</button>
    <button v-on:click="say('晏几道')">晏几道</button>
</div>
</body>
<script>
    const app = new Vue({
        el : "#app",
        methods: {
            say: function (poet) {
                if(poet === "李商隐") {
                    alert("直道相思了无益,未妨惆怅是轻狂")
                } else if(poet === "晏几道") {
                    alert("从别后,忆相逢,几回魂梦与君同")
                } else{
                    alert("输入错误")
                }
            }
        }
    });
</script>
</html>

v-model

你可以用 v-model 指令在表单 <input>、<textarea><select>元素上创建双向数据绑定。

文本

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <title>Title</title>
</head>
<body>
<div id="app">
    <input v-model="message" placeholder="edit me">
    <p>Message is: {{ message }}</p>
</div>
</body>
<script>
    const app = new Vue({
        el : "#app",
        data : {
            message: ""
        }
    });
</script>
</html>

复选框

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <title>Title</title>
</head>
<body>
<div id="app">
        <select v-model="selected">
            <option disabled value="">请选择</option>
            <option>杜牧</option>
            <option>李商隐</option>
            <option>韦庄</option>
        </select>
        <span>Selected: {{ selected }}</span>
</div>
</body>
<script>
    const app = new Vue({
        el : "#app",
        data : {
           selected: ""
        }
    });
</script>
</html>

最后

更多文章可以关注公众号QStack,追寻最纯粹的技术,享受编程的快乐。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值