Vue的14个内置指令、自定义指令和5个指令钩子函数

声明:部分内容来自vue官方文档或网络。

一、从Vue官方文档中可以了解Vue的14个内置指令,如表格所示:

序号指令代码作用
1v-text更新元素的 textContent。
2v-html更新元素的 innerHTML。
3v-show根据表达式之真假值,切换元素的 display CSS 属性。
4v-if根据表达式的值的真假条件渲染元素。
5v-else为 v-if 或者 v-else-if 添加“else 块”。
6v-else-if表示 v-if 的 “else if 块”。可以链式调用。
7v-for基于源数据多次渲染元素或模板块。
8v-on缩写为“@”。绑定事件监听器。事件类型由参数指定。表达式可以是一个方法的名字或一个内联语句,如果没有修饰符也可以省略。
9v-bind缩写为“:”。动态地绑定一个或多个特性,或一个组件 prop 到表达式。
10v-model在表单控件或者组件上创建双向绑定。
11v-slot缩写为“#”。 提供具名插槽或需要接收 prop 的插槽。
12v-pre跳过这个元素和它的子元素的编译过程。
13v-cloak这个指令保持在元素上直到关联实例结束编译。
14v-once只渲染元素和组件一次。

二、示例如下:

1.v-text

<span v-text="msg"></span><span>{{msg}}</span>

2.v-html

<div v-html="html"></div>

3.v-show

<div v-show="isShow"></div>

4.v-if

5.v-else-if

6.v-else

<div v-if="theState===1">1</div>
<div v-else-if="theState===2">2</div>
<div v-else-if="theState===3">3</div>
<div v-else>0</div>

7.v-for

<li v-for="item in items">{{item.text}}</li>
<!-- item 为当前项,index 为索引 -->
<li v-for="(item, index) in list">{{item}} -- {{index}}</li>
<!-- item 为值,key 为键,index 为索引 -->
<li v-for="(item, key, index) in obj">{{item}} -- {{key}}</li>

8.v-on

<!-- 方法处理器 -->
<button v-on:click="doThis"></button><button @click="doThis"></button>
<!-- 内联语句 -->
<button v-on:click="doThat('hello', $event)"></button>

用到的修饰符有:
.stop:调用event.stopPropagation()。
.prevent:调用event.preventDefault()。
.capture:添加事件侦听器时使用 capture 模式。
.self:只当事件是从侦听器绑定的元素本身触发时才触发回调。
.{keyCode | keyAlias}:只当事件是从特定键触发时才触发回调。
.native:监听组件根元素的原生事件。
.once:只触发一次回调。
.left:(2.2.0) 只当点击鼠标左键时触发。
.right:(2.2.0) 只当点击鼠标右键时触发。
.middle:(2.2.0) 只当点击鼠标中键时触发。
.passive:(2.3.0) 以{ passive: true }模式添加侦听器。

9.v-bind

<!-- 绑定一个属性 -->
<img v-bind:src="imageSrc"><img :src="imageSrc">
<!-- 内联字符串拼接 -->
<img :src="'/path/to/images/' + fileName">
<!-- class 绑定 -->
<div :class="{ red: isRed }"></div>
<div :class="[classA, classB]"></div>
<div :class="[classA, { classB: isB, classC: isC }]">
<!-- style 绑定 -->
<div :style="{ fontSize: size + 'px' }"></div>
<div :style="[styleObjectA, styleObjectB]"></div>
<div :style="isBorder?'border-radius:50%':''"></div>

10.v-model

<!-- 计算器 -->
<input type="text" v-model="message" placeholder="edit me">
<p>Message is: {{message}}</p>

11.v-slot

<Hello-world>
      <h1>你好</h1>
      <h2 slot="h2" @click="say">这是一个插槽h2</h2>
      <h3 slot="h3">这是一个插槽h3</h3>
</Hello-world>

<template id="hello">
      <div>
        <slot name="h2"></slot>
        <slot name="h3"></slot>
        <slot></slot>
      </div>
</template>

12.v-pre

<span v-pre>{{ 这里将不会被编译 }}</span>

13.v-cloak

[v-cloak] {
  display: none;
}
<div v-cloak>
  {{ message }}
</div>

14.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>
<!-- `v-for` 指令-->
<ul>
  <li v-for="i in list" v-once>{{i}}</li>
</ul>

三、Vue支持自定义指令:

1.定义全局自定义指令

Vue.directive('my-directive', {
  bind: function () {},
  inserted: function () {},
  update: function () {},
  componentUpdated: function () {},
  unbind: function () {}
})

Vue.directive('focus', {
  // 当绑定元素插入到 DOM 中。
  inserted: function (el) {
    el.focus(); // 聚焦元素
  }
})

2.定义局部自定义指令

new Vue({
 directives: {
   focus: {
     inserted: function (el) {
       el.focus(); // 聚焦元素
     }
   }
 }
})

四、5个指令钩子函数:

  • bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。
  • inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。
  • update:被绑定元素所在的模板更新时调用,而不论绑定值是否变化。
  • componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。
  • unbind: 只调用一次,指令与元素解绑时调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值