首页 web前端 Vue.js 了解vue.js中的常用指令(总结)

了解vue.js中的常用指令(总结)

Nov 06, 2020 pm 05:58 PM
vue.js 指令

了解vue.js中的常用指令(总结)

v-text

v-text主要用来更新textContent,可以等同于JS的text属性。

<span v-text="text"></span>
// 等同于下方语句: 
<span>{{text}}</span>
登录后复制

v-html

双大括号的方式会将数据解释为纯文本,而非HTML。为了输出真正的HTML,可以用v-html指令。它等同于JS的 innerHtml 属性。

注意:内容按普通 HTML 插入 - 不会作为 Vue 模板进行编译 。

<div v-html="html"></div>
登录后复制

v-show

等同于 css 的 dispaly 属性切换 “none” 和 “block” 设值。

<div v-show="isShow">hello world</div>
登录后复制
登录后复制

v-if

v-if可以实现条件渲染,Vue会根据表达式的值的真假条件来渲染元素。

<div v-show="isShow">hello world</div>
登录后复制
登录后复制

上方代码,如果 isShow 为 false 则div被渲染,否则不被渲染。

注意:

v-if 需要和 v-show 区分开,v-show 的元素会始终被渲染并保存在 dom 中,它只是简单的切换 css 的 dispaly 属性。

v-if有更高的切换开销。

v-show有更高的初始渲染开销。

所以,如果要非常频繁的切换,使用 v-show 较好;如果在运行时条件不太可能改变,使用 v-if 较好。

v-else

v-else 是搭配 v-if 使用的,它必须紧跟在 v-if 或者 v-else-if 后面,否则不起作用。
类似 JS 的 if .. else。

<div v-if="isSow">值为true的时候显示的内容</div>
<div v-else>值为false的时候显示的内容</div>
登录后复制

v-else-if

v-else-if充当v-if的else-if块,可以链式的使用多次。 类似JS的 if .. else if .. else

<div v-if="type===&#39;A&#39;">
  A
</div>
<div v-if="type===&#39;B&#39;">
  B
</div>
<div v-if="type===&#39;C&#39;">
  C
</div>
<div v-else>
  Not A,B,C
</div>
登录后复制

v-for

用v-for指令根据遍历数组来进行渲染。

<ul>
	<li v-for="item in items">{{item.name}}</li>
</ul>

<script>
new Vue({
  el: &#39;#app&#39;,
  data: {
    items: [
      { name: &#39;Runoob&#39; },
      { name: &#39;Google&#39; },
      { name: &#39;Taobao&#39; }
    ]
  }
})
</script>

// 补充:
// 也可以自行指定参数,最多可以接受3个参数
<div v-for="(item, index) in items"></div>
<div v-for="(val, key) in object"></div>
<div v-for="(val, name, index) in object"></div>

// 迭代对象
<ul>
    <li v-for="value in object">
     {{ index }}. {{ key }} : {{ value }}
</li>

// 迭代整数
<ul>
    <li v-for="n in 10">
     {{ n }}
    </li>
</ul>
登录后复制

v-on

绑定事件监听器。事件类型由参数指定。表达式可以是一个方法的名字或一个内联语句,如果没有修饰符也可以省略。
v-on 也可以简写为 " @ ",如:

v-on="show" 可以简写为: @show

<!-- 方法处理器 -->
<button v-on:click="doThis"></button>

<!-- 动态事件 (2.6.0+) -->
<button v-on:[event]="doThis"></button>

<!-- 内联语句 -->
<button v-on:click="doThat(&#39;hello&#39;, $event)"></button>

<!-- 缩写 -->
<button @click="doThis"></button>

<!-- 动态事件缩写 (2.6.0+) -->
<button @[event]="doThis"></button>

<!-- 停止冒泡 -->
<button @click.stop="doThis"></button>

<!-- 阻止默认行为 -->
<button @click.prevent="doThis"></button>

<!-- 阻止默认行为,没有表达式 -->
<form @submit.prevent></form>

<!--  串联修饰符 -->
<button @click.stop.prevent="doThis"></button>

<!-- 键修饰符,键别名 -->
<input @keyup.enter="onEnter">

<!-- 键修饰符,键代码 -->
<input @keyup.13="onEnter">

<!-- 点击回调只会触发一次 -->
<button v-on:click.once="doThis"></button>

<!-- 对象语法 (2.4.0+) -->
<button v-on="{ mousedown: doThis, mouseup: doThat }"></button>
登录后复制

还可以使用修饰符,具体如下:

.stop - 调用 event.stopPropagation()。

.prevent - 调用 event.preventDefault()。

.capture - 添加事件侦听器时使用 capture 模式。

.self - 只当事件是从侦听器绑定的元素本身触发时才触发回调。

.{keyCode | keyAlias} - 只当事件是从特定键触发时才触发回调。

.native - 监听组件根元素的原生事件。

.once - 只触发一次回调。

.left - 只当点击鼠标左键时触发。

.right - 只当点击鼠标右键时触发。

.middle - 只当点击鼠标中键时触发。

.passive - 以 { passive: true } 模式添加侦听器

v-bind

动态地绑定一个或多个特性,或一个组件 prop 到表达式。常用于动态绑定class和style。以及href等。

可简写为:" : ",如:

v-bind:class=" isActive : 'active' :' ' ",可简写为::class=" isActive : 'active' :' ' "

<div v-bind:class=" isActive : &#39;active&#39; :&#39; &#39; "></div>
<script>
  var app = new Vue({
    el: &#39;#app&#39;,
    data: {
      isActive : true, 
    }
  })
</script>

//渲染结果为: <div class="active"></div>
登录后复制

绑定多个 class ,具体如下:

<div v-bind:class="[ isActive : &#39;active&#39; :&#39; &#39; , isError: &#39;error&#39; :&#39; &#39; ]">
</div>
<script>
  var app = new Vue({
    el: &#39;#app&#39;,
    data: {
      isActive : true, 
      isError:  true,
    }
  })
</script>

//渲染结果为: <div class="active error"></div>
登录后复制

其他实例,具体见下方代码:

<!-- 绑定一个属性 -->
<img v-bind:src="imageSrc">

<!-- 动态特性名 (2.6.0+) -->
<button v-bind:[key]="value"></button>

<!-- 缩写 -->
<img :src="imageSrc">

<!-- 动态特性名缩写 (2.6.0+) -->
<button :[key]="value"></button>

<!-- 内联字符串拼接 -->
<img :src="&#39;/path/to/images/&#39; + fileName">

<!-- class 绑定 -->
<div :class="{ red: isRed }"></div>
<div :class="[classA, classB]"></div>
<div :class="[classA, { classB: isB, classC: isC }]">

<!-- style 绑定 -->
<div :style="{ fontSize: size + &#39;px&#39; }"></div>
<div :style="[styleObjectA, styleObjectB]"></div>

<!-- 绑定一个有属性的对象 -->
<div v-bind="{ id: someProp, &#39;other-attr&#39;: otherProp }"></div>

<!-- 通过 prop 修饰符绑定 DOM 属性 -->
<div v-bind:text-content.prop="text"></div>

<!-- prop 绑定。“prop”必须在 my-component 中声明。-->
<my-component :prop="someThing"></my-component>

<!-- 通过 $props 将父组件的 props 一起传给子组件 -->
<child-component v-bind="$props"></child-component>

<!-- XLink -->
<svg><a :xlink:special="foo"></a></svg>
登录后复制

v-model

在表单控件或者组件上创建双向绑定。
v-model会忽略所有表单元素的value、checked、selected特性的初始值。因为它选择Vue实例数据做为具体的值。

<div id="app">
  <input v-model="somebody">
  <p>hello {{somebody}}</p>
</div>
<script>
  var app = new Vue({
    el: &#39;#app&#39;,
    data: {
      somebody:&#39;小明&#39;
    }
  })
</script>
登录后复制

这个例子中直接在浏览器input中输入别的名字,下面的p的内容会直接跟着变。这就是双向数据绑定。

可用修饰符:

.lazy - 默认情况下,v-model同步输入框的值和数据。可以通过这个修饰符,转变为在change事件再同步。

.number - 自动将用户的输入值转化为数值类型

.trim - 自动过滤用户输入的首尾空格

修饰符使用方法:如:

<input v-model.trim="somebody">
登录后复制

v-pre

v-pre主要用来跳过这个元素和它的子元素编译过程。可以用来显示原始的Mustache标签。跳过大量没有指令的节点加快编译。

<div id="app">
  <span v-pre>{{message}}</span> //这条语句不进行编译
  <span>{{message}}</span>
</div>
登录后复制

这个指令是用来保持在元素上直到关联实例结束时进行编译。

<div id="app" v-cloak>
  <div>
    {{message}}
  </div>
</div>
<script type="text/javascript">
  new Vue({
   el:&#39;#app&#39;,
   data:{
    message:&#39;hello world&#39;
   }
  })
</script>
登录后复制

解释:
在页面加载时会闪烁,先显示:

<div>
  {{message}}
</div>
登录后复制

然后才会编译为:

<div>
  hello world!
</div>
登录后复制

v-cloak指令可以解决上面插值闪烁的问题,如下:其实利用的就是当插值没有被加载出来的是通过 style属性将内容给隐藏了。

  <style>
    [v-cloak] {
       display: none; 
    }
  </style>
  
  <div id="app">
    <!-- 使用 v-cloak 能够解决 插值表达式闪烁的问题 -->
    <p v-cloak>++++++++ {{ msg }} ----------</p>
  </div>
  
  <script>
    var vm = new Vue({
      el: &#39;#app&#39;,
      data: {
        msg: &#39;hello&#39;,
      }
    })
  </script>
登录后复制

v-once

v-once关联的实例,只会渲染一次。之后的重新渲染,实例极其所有的子节点将被视为静态内容跳过,这可以用于优化更新性能。

<span v-once>This will never change:{{msg}}</span> //单个元素
<div v-once>//有子元素
  <h1>comment</h1>
  <p>{{msg}}</p>
</div>
<my-component v-once:comment="msg"></my-component> //组件
<ul>
  <li v-for="i in list">{{i}}</li>
</ul>
登录后复制

上面的例子中,msg,list即使产生改变,也不会重新渲染。

v-slot

提供具名插槽或需要接收 prop 的插槽。

可简写为:#

slot 和 scope-slot 是在 vue@2.6.x 之前的语法,而从 vue@2.6.0 开始,官方推荐我们使用 v-slot 来替代前两者。

使用具名插槽来自定义模板内容(vue@2.6.x已经废弃)

<div class="container">
  <header>
    <slot name="header"></slot>
  </header>
  <main>
    <slot></slot>
  </main>
  <footer>
    <slot name="footer"></slot>
  </footer>
</div>
登录后复制

在向具名插槽提供内容的时候,我们可以在一个父组件的 元素上使用 slot 特性:

<base-layout>
  <template slot="header">
    <h1>Here might be a page title</h1>
  </template>

  <p>A paragraph for the main content.</p>
  <p>And another one.</p>

  <template slot="footer">
    <p>Here&#39;s some contact info</p>
  </template>
</base-layout>
登录后复制

接下来,使用 v-slot 指令改写上面的栗子:

<base-layout>
  <template v-slot:header>
    <h1>Here might be a page title</h1>
  </template>

  <p>A paragraph for the main content.</p>
  <p>And another one.</p>

  <template v-slot:footer>
    <p>Here&#39;s some contact info</p>
  </template>
</base-layout>
登录后复制

使用 # 简写代替 v-slot

<base-layout>
  <template #header>
    <h1>Here might be a page title</h1>
  </template>

  <p>A paragraph for the main content.</p>
  <p>And another one.</p>

  <template #footer>
    <p>Here&#39;s some contact info</p>
  </template>
</base-layout>
登录后复制

相关推荐:

2020年前端vue面试题大汇总(附答案)

vue教程推荐:2020最新的5个vue.js视频教程精选

更多编程相关知识,请访问:编程教学!!

以上是了解vue.js中的常用指令(总结)的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

泰拉瑞亚怎么用指令获得物品?-泰拉瑞亚怎么收藏物品? 泰拉瑞亚怎么用指令获得物品?-泰拉瑞亚怎么收藏物品? Mar 19, 2024 am 08:13 AM

泰拉瑞亚怎么用指令获得物品?一、什么是泰拉瑞亚给予物品指令在泰拉瑞亚游戏中,给予物品指令是一项非常实用的功能。通过这个指令,玩家可以直接获取需要的物品,而不必费力地去打怪或者传送到某个地点。这样可以极大地节省时间,提高游戏的效率,让玩家更专注于探索和建设世界。总的来说,这个功能让游戏体验变得更加流畅和愉快。二、如何使用泰拉瑞亚给予物品指令1.打开游戏并进入游戏界面。2.按下键盘上的“Enter”键,打开聊天窗口。3.在聊天窗口中输入指令的格式:“/give[玩家名称][物品ID][物品数量]”。

深入探讨vite是怎么解析.env文件的 深入探讨vite是怎么解析.env文件的 Jan 24, 2023 am 05:30 AM

使用vue框架开发前端项目时,我们部署的时候都会部署多套环境,往往开发、测试以及线上环境调用的接口域名都是不一样的。如何能做到区分呢?那就是使用环境变量和模式。

图文详解如何在Vue项目中集成Ace代码编辑器 图文详解如何在Vue项目中集成Ace代码编辑器 Apr 24, 2023 am 10:52 AM

Ace 是一个用 JavaScript 编写的可嵌入代码编辑器。它与 Sublime、Vim 和 TextMate 等原生编辑器的功能和性能相匹配。它可以很容易地嵌入到任何网页和 JavaScript 应用程序中。Ace 被维护为Cloud9 IDE的主要编辑器 ,并且是 Mozilla Skywriter (Bespin) 项目的继承者。

探讨如何在Vue3中编写单元测试 探讨如何在Vue3中编写单元测试 Apr 25, 2023 pm 07:41 PM

当今前端开发中,Vue.js 已经成为了一个非常流行的框架。随着 Vue.js 的不断发展,单元测试变得越来越重要。今天,我们将探讨如何在 Vue.js 3 中编写单元测试,并提供一些最佳实践和常见的问题及解决方案。

深入聊聊vue3中的reactive() 深入聊聊vue3中的reactive() Jan 06, 2023 pm 09:21 PM

前言:在vue3的开发中,reactive是提供实现响应式数据的方法。日常开发这个是使用频率很高的api。这篇文章笔者就来探索其内部运行机制。

VUE3快速入门:使用Vue.js指令实现选项卡切换 VUE3快速入门:使用Vue.js指令实现选项卡切换 Jun 15, 2023 pm 11:45 PM

本文旨在帮助初学者快速入手Vue.js3,实现简单的选项卡切换效果。Vue.js是一个流行的JavaScript框架,可用于构建可重用的组件、轻松管理应用程序的状态和处理用户界面的交互操作。Vue.js3是该框架的最新版本,相较于之前的版本变动较大,但基本原理并未改变。在本文中,我们将使用Vue.js指令实现选项卡切换效果,目的是让读者熟悉Vue.js的

Vue中JSX语法和模板语法的简单对比(优劣势分析) Vue中JSX语法和模板语法的简单对比(优劣势分析) Mar 23, 2023 pm 07:53 PM

在Vue.js中,开发人员可以使用两种不同的语法来创建用户界面:JSX语法和模板语法。这两种语法各有优劣,下面就来探讨一下它们的区别和优劣势。

解析Vue2实现composition API的原理 解析Vue2实现composition API的原理 Jan 13, 2023 am 08:30 AM

自从 Vue3 发布之后,composition API 这个词走入写 Vue 同学的视野之中,相信大家也一直听到 composition API 比之前的 options API 有多好多强,如今由于 @vue/composition-api 插件的发布,Vue2 的同学也可以上车咯,接下来我们主要以响应式的 ref 和 reactive 来深入分析一下,这个插件是怎么实现此

See all articles