在vue中,指令以v-开头,是一种特殊的自定义行间属性,指令的职责就是其表达式的值改变时相应地将某些行为应用到DOM上

指令使用的示例

在下面的运行结果中可以看到,v-html是可以解析html标签的并且还会将原有的内容或者结构覆盖掉,v-text会将原来p标签内的内容覆盖掉

vue的内置指令

v-bind:动态的绑定数据(主要用于绑定标签的属性值)  简写为 :

v-on:绑定事件监听器    简写为@

v-text 更新数据,会覆盖已有结构

v-html  可以解析数据中的html结构

v-show  根据值得真假,切换元素的display属性

v-if  根据值得真假,切换元素会被销毁、重建

v-else-if  多条件判断,为真则渲染

v-else  条件都不符合渲染

v-for 基于源数据多次渲染元素模板板块

v-model 在表单操作元素上创建双向数据绑定

v-pre 跳过元素和子元素的编译过程

v-once 只渲染一次,随后数据更新不重新渲染

v-cloak 隐藏未编译的Mustache语法(就是{{XXXX}}这样的问题,数据还没准备好),css中设置[v-cloak] {display:none}

vue常用的内置指令

v-bind:动态属性的绑定数据,主要用于绑定标签的属性值,比如下面代码,自定义属性title的值为titleName的值,对应在data中的titleName的值  简写为 :

<p v-bind:title="titleName">自定义属性渲染使用示例</p> 
<p :title="titleName">自定义属性渲染使用示例</p>

这种动态绑定属性的方式,在方法或者其他地方修改了合格属性值,在视图上也会跟着更新

<a v-bind:href="url">百度</a>
data () {
return {
url: 'https://www.baidu.com'
}
}

也可以将这个指令使用在组件标签中,效果就是这个组件的根元素有这么一个属性,写法如下<hello>标签是一个在该组件中引入的另外一个组件,直接将v-bind指令使用在这个组件标签中

<hello v-bind:title="titleName"></hello>

v-on:绑定事件监听器    简写为@

<button @click="hint">提示</button>

v-text:更新数据,这个属性是绑定在data里面的textContent变量的值,会将原来标签内的内容覆盖掉,并且该指令不会解析textContent里面的html标签

<p v-text="textContent">你会被textContent的内容覆盖</p>

v-html:  可以解析数据中的html结构,并且会将原有的内容或者结构覆盖掉

<p v-html="htmlContent">我会被覆盖的</p>

v-model: 在表单操作元素上创建双向数据绑定

<input v-model="content"/><p>{{ content }}</p>
data () {
return {
content: '我是双向数据绑定,可以有默认值',
}
}

v-show:  根据值得真假,切换元素的display属性

<p v-show="isShow">v-show表示根据这个绑定的值的真或者假来切换该p标签以及标签内的内容是否显示(display)</p>
data () {
return {
isShow: true
}
}

ref 

为某个元素注册一个唯一标识, vue对象通过$refs属性访问这个元素对象

<template>
<div id="app">
<p ref="msg">abcd</p>
<button @click="hint">提示</button>
</div>
</template> <script>
export default {
name: 'app',
data () {
return {}
},
methods: {
hint () {
alert(this.$refs.msg.innerHTML)
}
}
}
</script>

v-cloak

隐藏未编译的Mustache语法(就是{{XXXX}}这样的问题,数据还没准备好),配合css中设置[v-cloak] {display:none} 

这个指令只会在模板解析之前会存在,解析之后就没了,所以display这个css样式属性就匹配不到了

<template>
<div id="app">
<p v-cloak>{{content}}</p>
</div>
</template> <script>
export default {
name: 'app',
data () {
return {
content: '<a href="http://www.baidu.com">百度一下</a>'
}
}
}
</script>
<style>
[v-cloak] {
display: none;
}
</style>

自定义指令——注册全局指令

注册全局指令的模板如下:

Vue.directive('my-directive', function(el, binding){
el.innerHTML = binding.value.toupperCase()
})

下面全局定义一个名为v-upper-text的自定义指令,全局的需要在main.js中去定义,实际开发中最好写一个单独的js文件引入进来

import Vue from 'vue'
import App from './App' // 注册一个全局指令
// el: 指令所在的标签对象
// binding: 包含指令相关数据的容器对象
Vue.directive('upper-text', function (el, binding) {
console.log(el, binding)
el.textContent = binding.value.toUpperCase()
}) Vue.config.productionTip = false /* eslint-disable no-new */
new Vue({
el: '#app',
template: '<App/>',
components: { App }
})

在需要用到的组件中使用这个全局定义的自定义指令

<template>
<div id="app">
<div id="test">
<p>{{msg}}</p>
<p v-upper-text="msg"></p>
</div>
</div>
</template> <script>
export default {
name: 'app',
data () {
return {
msg: 'i like you'
}
}
}
</script>

运行效果如下:

自定义指令——注册局部指令

注册局部指令的模板如下:

directives : {
'my-directive' : {
bind (el, binding) {
el.innerHTML = binding.value.toupperCase()
}
}
}

定义的局部指令,只能在所在的组件中使用

<template>
<div id="app">
<div id="test">
<p>{{msg}}</p>
<p v-lower-text="msg"></p>
</div>
</div>
</template> <script>
export default {
name: 'app',
data () {
return {
msg: 'I Like You'
}
},
// 注册局部指令
// el: 指令所在的标签对象
// binding: 包含指令相关数据的容器对象
directives: {
'lower-text' (el, binding) {
console.log(el, binding)
el.textContent = binding.value.toLowerCase()
}
}
}
</script>

运行效果如下:

vue指令详解和自定义指令的更多相关文章

  1. angularJS directive详解(自定义指令)

    Angularjs指令定义的API AngularJs的指令定义大致如下 其中return返回的对象包含很多参数,下面一一说明 1.restrict (字符串)可选参数,指明指令在DOM里面以什么形式 ...

  2. AVX 指令详解 ,还有SSE指令

    https://blog.csdn.net/fengbingchun/article/details/23598709 本人从来不复制的,自己看!.

  3. 转载 《AngularJS》5个实例详解Directive(指令)机制

    <AngularJS>5个实例详解Directive(指令)机制 大漠穷秋 本文整理并扩展了<AngularJS>这本书第六章里面的内容,此书近期即将由电子工业出版社出版,敬请 ...

  4. 迈向angularjs2系列(2):angular2指令详解

    一:angular2 helloworld! 为了简单快速的运行一个ng2的app,那么通过script引入预先编译好的angular2版本和页面的基本框架. index.html: <!DOC ...

  5. nginx 代理服务指令详解

    nginx 正向代理与反向代理说明图 超级形象说明. 正向代理指令: 1, resolver 这个用于DNS服务器的ip . DNS服务器的主要工作是进行域名解析,将域名映射为对应IP地址 resol ...

  6. [转]JVM指令详解(上)

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 本文主要记录一些JVM指令,便于记忆与查阅. 一.未归类系列A 此系列暂未归类. 指令码    助记符      ...

  7. C#中的预处理器指令详解

    这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...

  8. rsync指令详解

    rsync指令详解(更详细的看官方文档http://rsync.samba.org/ftp/rsync/rsync.html) [root@Centos epel]# rsync --help rsy ...

  9. #pragma 预处理指令详解

    源地址:http://blog.csdn.net/jx_kingwei/article/details/367312 #pragma  预处理指令详解              在所有的预处理指令中, ...

随机推荐

  1. WPF 绕圈进度条(二)

    一 以前的方案 以前写过一个圆点绕圈的进度条,根据参数圆点个数和参数每次旋转角度,主要是在cs文件中动态添加圆点,通过后台定时器,动态设置角度后用正弦余弦计算(x,y)的位置. 此方案优点:动态添加L ...

  2. FastJson序列化Json自定义返回字段,普通类从spring容器中获取bean

    前言: 数据库的字段比如:price:1 ,返回需要price:1元. 这时两种途径修改: ① 比如sql中修改或者是在实体类转json前遍历修改. ②返回json,序列化时候修改.用到的是fastj ...

  3. vim 学习笔记系列(前言)

    今天上午的时候,看到大神在用vim编程,画面直观,速度很快,操作只需要用命令符就可以实施. 所以可以推断vim的命令符是复杂的,那么学习过程中记忆会很漫长,很痛苦,但是如果记住了这些命令符,并可以熟练 ...

  4. Js 控制随机数概率

    如: 取 1~10 之间的随机数,那么他们的取值范围是: 整数 区间 概率 1 [0,1) 0.1 2 [1,2) 0.1 3 [2,3) 0.1 4 [3,4) 0.1 5 [4,5) 0.1 6 ...

  5. PHP常用函数总结(二)

    PHP常用函数总结 数学函数 1.abs(): 求绝对值 $abs = abs(-4.2); //4.2 数字绝对值数字 2.ceil(): 进一法取整 echo ceil(9.999); // 10 ...

  6. 如何通过setTimeout理解JS运行机制详解

    setTimeout()函数:用来指定某个函数或某段代码在多少毫秒之后执行.它返回一个整数,表示定时器timer的编号,可以用来取消该定时器. 例子 ? 1 2 3 4 5 console.log(1 ...

  7. 【20190221】HTTP-URI与URL

    URI(uniform resource identifier)统一资源标识符是由某个协议方案表示的资源的定位标识符, URI 用字符串标识某一互联网资源,而 URL 表示资源的地点(互联网上所处的位 ...

  8. 关于select 文字居向

    我们都知道select的文字默认居左,而如果你想改变它,用text-align是不起作用的,因为select没有这个样式 但是它有自己的样式属性 文字靠右对齐:direction: rtl; 而如果要 ...

  9. PlugNT CMS v4.6.3 调用文章上一页和下一页及点击数加1

    using System; using System.Data; using System.Web; using System.Web.UI; using System.Web.UI.WebContr ...

  10. Dynamics 365 Online-Relevance Search

    区别于Quick Find,以及Full-Text Quick Find,Dynamics 365 Online有了一个特有的Search功能:Relevance Search.至于为什么是Onlin ...