Vue.js 常用指令详解:v-if、v-show、v-for、v-bind 与 v-model

作者:山岚

时间:2026-10-23

浏览:264

本文详细介绍 Vue.js 的核心常用指令,包括条件渲染的 v-if 与 v-show、列表渲染的 v-for、属性绑定的 v-bind 以及表单双向绑定的 v-model。通过具体代码示例解析各指令的语法、区别及应用场景,帮助开发者快速掌握 Vue 数据驱动视图的基础用法。

文章目录

Vue.js 简介与数据驱动

Vue.js 是当前流行的 JavaScript MVVM(Model-View-ViewModel)库,基于数据驱动和组件化理念构建。相比 Angular.js,Vue.js 提供了更简洁、易理解的 API,便于开发者快速上手。

若习惯 jQuery 手动操作 DOM,学习 Vue.js 时需转变思维。Vue.js 采用数据驱动模式,无需手动操作 DOM,而是通过特殊 HTML 语法将 DOM 与数据绑定。绑定建立后,DOM 会随数据变更自动同步更新。

使用 Vue.js 时,可结合其他库(如 jQuery)共同开发。

1. 使用

使用 Vue 的过程即定义 MVVM 各组成部分的过程。


<!--这里定义View-->
<div id="app">{{ message }}</div>
<script src="js/vue.js"></script>
<script>
    // 这里定义Model
    var exampleData = {
      message: 'Hello World!'
    }
    // 这里创建一个 Vue 实例或 "ViewModel"
    // 连接 View 与 Model
    new Vue({
      el: '#app',
      data: exampleData
    })
</script>

Vue.js 常用指令概览

2. Vue.js 的常用指令

Vue.js 提供多种内置指令,下文将逐一介绍。

• v-if 指令 • v-show 指令 • v-else 指令 • v-for 指令 • v-bind 指令 • v-on 指令

Vue.js 具备良好扩展性,支持开发自定义指令,相关内容将在后续文章介绍。

v-if 指令详解

2.1 v-if 指令

v-if 后接可转换为布尔类型的表达式。


<div id="app">
      <h1>Hello, Vue.js!</h1>
      <h1 v-if="yes">Yes!</h1>
      <h1 v-if="no">No!</h1>
      <h1 v-if="age >= 25">Age: {{ age }}</h1>
      <h1 v-if="name.indexOf('jack') >= 0">Name: {{ name }}</h1>
</div>
 <script src="js/vue.js"></script>
 <script>
    var vm = new Vue({
      el: '#app',
      data: {
        yes: true,
        no: false,
        age: 28,
        name: 'keepfool'
      }
    })
 </script>

最终输出结果取决于表达式真假。


<div id="app">
  <h1>Hello, Vue.js!</h1>
  <h1>Yes!</h1>
  <!---->
  <h1>Age: 28</h1>
  <!---->
</div>

v-show 指令与 v-if 的区别

2.2 v-show


 <div id="app">
      <h1>Hello, Vue.js!</h1>
      <h1 v-show="yes">Yes!</h1>
      <h1 v-show="no">No!</h1>
      <h1 v-show="age >= 25">Age: {{ age }}</h1>
      <h1 v-show="name.indexOf('jack') >= 0">Name: {{ name }}</h1>
    </div>
  </body>
  <script src="js/vue.js"></script>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        yes: true,
        no: false,
        age: 28,
        name: 'keepfool'
      }
    })
  </script>

此处代码仅将 v-if 替换为 v-show。

输出效果如下。


<div id="app">
<h1>Hello, Vue.js!</h1>
<h1>Yes!</h1>
<h1 style="display: none;">No!</h1>
<h1>Age: 28</h1>
<h1 style="display: none;">Name: keepfool</h1>
</div>

主要区别在于:v-if 直接不输出 HTML 代码,而 v-show 通过 display:none 隐藏元素。

v-else 指令使用规则

2.3 v-else 指令


<h1 v-if="age >= 25">Age: {{ age }}</h1>
<h1 v-else>Name: {{ name }}</h1>
<script src="js/vue.js"></script>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        age: 28,
        name: 'keepfool',
        sex: 'Male'
      }
    })
</script>

v-else 的前一兄弟元素必须拥有 v-if 或 v-else-if。新版 Vue.js 新增 v-else-if 用法与 v-if 类似,但前一兄弟元素仍需有 v-if 或 v-else-if。旧版中 v-else 前可跟 v-show,但新版中 v-else 前不能是 v-show。

v-for 指令遍历用法

2.4 v-for 指令


<div v-for="p in people">
   <h1>Age: {{ p.age }}</h1>
   <h1>Name: {{ p.name }}</h1>
   <h1>Sex: {{ p.sex }}</h1>
</div>
<script charset="utf-8" src="js/vue.js"></script>
<script type="text/javascript">
   var myModel = {
    people:[
      {
        age: 25,
        name: 'keepfool',
        sex: 'Male'
      },
      {
        age: 26,
        name: 'keepfool2',
        sex: 'FeMale'
      },
      {
        age: 27,
        name: 'keepfool3',
        sex: 'Male2'
      }
    ]
  };
 var vm = new Vue({
  el: '#app',
  data: myModel
})
</script>

父元素使用 v-for,子元素可遍历绑定的 Array、Object、number 或 string。

v-for 还支持以下用法。


<div v-for="(item, index) in items"></div>
<div v-for="(val, key) in object"></div>
<div v-for="(val, key, index) in object"></div>

v-bind 指令属性绑定

2.5 v-bind 指令

v-bind 指令名称后可带参数,中间用冒号隔开,通常用于 HTML 元素的特性(attribute)。


<div id="app">
   <ul class="pagination">
     <li v-for="n in pageCount">
       <a href="javascripit:void(0)" rel="external nofollow" v-bind:class="activeNumber === n ? 'active' : ''">{{ n }}</a>
     </li>
   </ul>
</div>
 <script src="js/vue.js"></script>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        activeNumber: 1,
        pageCount: 10
      }
    })
  </script>

其他示例如下。


<img v-bind:src="'/path/to/images/' + fileName">
<div v-bind="{ 'id': someProp, 'other-attr': otherProp }"></div>

v-on 指令事件处理

2.6 v-on 指令


<div id="app">
      <p><input type="text" v-model="message"></p>
      <p>
        <!--click事件直接绑定一个方法-->
        <button v-on:click="greet">Greet</button>
      </p>
      <p>
        <!--click事件使用内联语句-->
        <button v-on:click="say('Hi')">Hi</button>
      </p>
</div>
 <script src="js/vue.js"></script>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        message: 'Hello, Vue.js!'
      },
      // 在 `methods` 对象中定义方法
      methods: {
        greet: function() {
          // // 方法内 `this` 指向 vm
          alert(this.message)
        },
        say: function(msg) {
          alert(msg)
        }
      }
    })
  </script>

v-model 指令双向绑定

2.7 v-model 指令

v-model 在表单控件元素上创建双向数据绑定。


<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}</p>

总结

以上介绍了 Vue.js 语法及常用指令,希望对大家有所帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章