内置指令

v-text 指令

在其所在的节点中渲染文本内容

与插值语法的区别:

  • v-text会替换掉节点中的内容,{{x}}不会
  • 不如{{x}}灵活

用法,无法识别html结构:

<h1 v-text="name">你好,</h1>

data:{
	name:'dlut'
	str:'<h3>xxxxx</h3>'
}

v-html 指令

向指定的节点渲染包含html结构的内容。

与插值语法的区别:

  • v-html会替换掉节点中的所有内容,{{x}}不会
  • v-html可以识别html结构,并进行渲染
  • 存在安全问题

用法:

<h1 v-html="name">你好,</h1>

data:{
	name:'dlut'
	str:'<h3>xxxxx</h3>'
}

v-cloak 指令

本质上是一个特殊属性,Vue实例创建完毕并接管容器后,会删除v-cloak属性。

使用css配合v-cloak可以解决网页网速慢时,展示出模板如{{x}}的问题。

如下,当首次加载时,先隐藏模板,加载到vue实例后,再显示。

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

<div id='root'>
		<h2 v-cloak>{{name}}</h2>
</div>

v-once 指令

v-once所在的节点在初次动态渲染后,就视作为静态内容。以后数据的改变将不会引起其所在结构的更新。

如下:当前n值会一直变化,但是初始化值不会:

<h2 v-once>初始化的值为:{{n}}</h2>
<h2>当前n值为:{{n}}</h2>
<button @click="n++"></button>

v-pre 指令

在不需要渲染的标签上添加,可以增加渲染速度

自定义指令

在指令定义时不加v-, 使用时加入。

语法

  • 局部指令,分为函数式对象式
new Vue({
	directives: {
    // 函数式,相当于封装了bind和update方法
    big(element, binding) {
			element.innerText = binding.value * 10;
		},
		// 指令名:配置对象,不同的时刻调用不同的函数
    fbind:{
				// 指令与元素成功绑定时
		    bind(element, binding){
					element.value = binding.value;
				},
				// 指令所在元素被插入页面时
				inserted(element, binding) {
					element.focus();
				},
				// 指令所在模板被重新解析时
				update(element, binding) {
					element.value = binding.value;
				},
				componentUpdated(element, binding){
					
				}
		 }
	}
})
  • 全局指令,多个vue实例都可以使用。Vue.directive(指令名, 配置对象 | 回调函数)
Vue.directive('fbind',{
		bind(){},
		inserted(){},
		update()
})

备注

  • key里面出现“-”,需要用字符串的形式作为key。
  • 自定义指令中的this指向window。
  • 指令名如果是多个单词,使用kebab-case命名方式,而不是驼峰命名。
// 使用
<span v-f-bind = "n"></span>
// 定义
'f-bind'(element, binding) {
	
}