指令在Vue中是个很重要的功能,在Vue项目中是必不可少的。根据官网的介绍,指令 (Directives) 是带有 v- 前缀的特殊属性。指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。
例如:

<p v-if="seen">现在你看到我了</p>

如上所示:其中,v-是Vue的标识,if是指令ID,yes是expression。yes是MVVM中的VM即ViewModel,当它的值发生变化,就会触发指令,改变View视图的显示。
expression还可以使用内联的模式,任何依赖的属性发生变化时都会触发指令的执行。例如:

<p v-if="'seen '+ user.name + ', ' + time"></p>

下面我们就谈谈常用的指令

数据渲染 v-text、v-html、v-model、{{}}

1、v-text

v-text是用于操作纯文本,它会替代显示对应的数据对象上的值。当绑定的数据对象上的值发生改变,插值处的内容也会随之更新。注意:此处为单向绑定,数据对象上的值改变,插值会发生变化;但是当插值发生变化并不会影响数据对象的值。其中:v-text可以简写为{{}},并且支持逻辑运算。例如:

<div id="app">
{{ message }}
</div>
var app = new Vue({
el : '#app',
data : {
message : 'hello world'
}
})

注:vue中有个指令叫做 v-once 可以通过v-once与v-text结合,实现仅执行一次性的插值

<span v-once>这个将不会随msg属性的改变而改变: {{ msg }}</span>
2、v-html

v-html用于输出html,它与v-text区别在于v-text输出的是纯文本,浏览器不会对其再进行html解析,但v-html会将其当html标签解析后输出。

<div id="app">
<p v-html="html"></p>
</div>
var app = new Vue({
el: "#app",
data: {
html: "<b style='color:red'>v-html</b>"
}
});
3、v-model

v-model通常用于表单组件的绑定,例如input,select等。它与v-text的区别在于它实现的表单组件的双向绑定,如果用于表单控件以外标签是没有用的。

<div id="app">
<input v-model="message " />
</div>
var app = new Vue({
el : '#app',
data : {
message : 'hello world'
}
})
4、{{}}

{{}}是v-text的简写形式

控制模块的显示/隐藏 v-if、v-show

v-if 是“真正的”条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。
v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。
一般来说, v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。
因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件不太可能改变,则使用 v-if 较好。

<template>
<div id="app">
<div v-if="isIf">
if
</div>
<div v-show="ifShow">
show
</div>
<button @click="toggleShow">toggle</button>
</div>
</template> <script>
export default {
name: 'app',
data() {
return {
isIf : true,
ifShow : true,
loginType : "username"
}
},
methods: {
toggleShow : function(){
this.ifShow = this.ifShow ? false : true;
this.isIf = this.isIf ? false : true;
}
}
}
</script>

渲染循环列表 v-for

v-for是一个循环指令,一般跟数组结合起来使用,例如:

<p id="wantuizhijia">
<ol>
<li v-for="site in sites">
{{ site.name }}
</li>
</ol>
</p> <script>
new Vue({
el: '#wantuizhijia',
data: {
sites: [
{ name: '网推之家' },
{ name: '谷歌' },
{ name: '淘宝' }
]
}
})
</script>

我们也可以在模板中使用 v-for:

<p id="wantuizhijia">
<ul>
<template v-for="place in places">
<li>{{ place.name }}</li>
<li>--------------</li>
</template>
</ul>
</p> <script>
new Vue({
el: '#wantuizhijia',
data: {
places: [
{ name: '厦门' },
{ name: '漳州' },
{ name: '福州' }
]
}
})
</script>

v-for 可以通过一个对象的属性来迭代数据:

<p id="wangtuizhijia">
<ul>
<li v-for="value in object">
{{ value }}
</li>
</ul>
</p> <script>
new Vue({
el: '#wangtuizhijia',
data: {
object: {
name: '汇票盟',
url: 'http://www.pjmeng.com',
slogan: '美好生活,等待你的开创!'
}
}
})
</script>

v-for 通过一个对象的属性来迭代数据,可以提供第二个的参数为键名:

<p id="wangtuizhijia">
<ul>
<li v-for="(value, key) in object">
{{ key }} : {{ value }}
</li> </ul>
</p> <script>
new Vue({
el: '#wangtuizhijia',
data: {
object: {
name: '汇票盟',
url: 'http://www.pjmeng.com',
slogan: '美好生活,等待你的开创!'
}
}
})
</script>

v-for 通过一个对象的属性来迭代数据,以第三个参数为索引:

<p id="wangtuizhijia">
<ul>
<li v-for="(value, key, index) in object">
{{ index }} {{ key }}:{{ value }}
</li> </ul>
</p> <script>
new Vue({
el: '#wangtuizhijia',
data: {
object: {
name: '脚本之家',
url: 'www.jb51.net',
slogan: '美好生活,等待你的开创!'
}
}
})
</script>

v-for 也可以循环整数

<p id=”wangtuizhijia”>
<ul>
<li v-for=”n in 10″>
{{ n }}
</li>
</ul>
</p>
<script>
new Vue({
el: ‘#wangtuizhijia'
})
</script>
</body>

事件绑定 v-on

1、用于监听DOM事件,典型的就是v-on:click,处理的方法放在methods属性里会默认传一个参数。

<button @click="test">点击</button>  

methods: {
test: function (evt) {
console.log(evt);
}
}

这里的evt,是标准的鼠标点击事件,类似jquery的click事件的回调函数中的参数。
可以通过this来找到data属性里的值,例如:

data: {
items: "test"
},
methods: {
test: function (evt) {
console.log(this.items);
console.log(evt);
}
}

这里的this.items,就是data的items这个变量。
2、内联语句处理器
给v-on事件传一个固定参数

<button @click="test('a')">点击搜索age</button>

当这个时候,函数的第一个参数就不是鼠标点击事件了,而是字符串a

test: function (mes) {
console.log(mes);
}

mes的值是’a’
$event
如果需要给他一个像上面一样的鼠标点击事件时,则使用$event作为参数(他和不传参数时的默认鼠标事件对象是相同的)。
使用Vue实例的变量,如果需要传一个data属性里的值,则直接放属性名
例如:

<div id="app">
<a href="http://www.baidu.com" @click="test(items, $event)">点击搜索age</a>
</div>
<script>
var test = {name: "test"};
var vm = new Vue({
el: '#app',
data: {
items: "test"
},
methods: {
test: function (msg, evt) {
console.log(msg);
evt.preventDefault();//阻止默认动作,比如这里是页面跳转
}
}
})
</script>

输出:test和BUTTON
以上就是Vue常用的指令用法,希望对大家有所帮助。

Vue中基本指令用法的更多相关文章

  1. Vue中directives的用法

    关于 vue 中 directives 的用法问题,详细可以参考vue官方对directives的解释 当前文章主要讲述directives怎么用,directives做权限按钮的功能 ###1. d ...

  2. Vue基础系列(五)——Vue中的指令(中)

    写在前面的话: 文章是个人学习过程中的总结,为方便以后回头在学习. 文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. VUE基础系列目录 < ...

  3. Vue中插槽指令

    08.29自我总结 Vue中插槽指令 意义 就是在组件里留着差值方便后续组件内容新增 而且由于插件是写在父级中数据可以直接父级中传输而不需要传子再传父有些情况会减少写代码量 示例 <div id ...

  4. Vue基础系列(四)——Vue中的指令(上)

    写在前面的话: 文章是个人学习过程中的总结,为方便以后回头在学习. 文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. VUE基础系列目录 < ...

  5. vue中自定义指令

    //vue中自定义指令 //使用 Vue.directive(id, [definition]) 定义全局的指令 //参数1:指令的名称.注意,在定义的时候,指令的名称前面,不需要加 v-前缀; 但是 ...

  6. vue中的一些用法,持续更新中......

    1.跳转用法 @1.在template模板中通常使用router-link to='url' @2.在js中 1.this.$router.push({path: ''/order/index''}) ...

  7. vue中keep-alive的用法

    1.keep-alive的作用以及好处 在做电商有关的项目中,当我们第一次进入列表页需要请求一下数据,当我从列表页进入详情页,详情页不缓存也需要请求下数据,然后返回列表页,这时候我们使用keep-al ...

  8. vue中的指令v-model

    Vue的指令:其实就是单个JavaScript表达式,一般来说是带有v-前缀:都有着对应的官网介绍:https://cn.vuejs.org/v2/guide/forms.html v-model:数 ...

  9. Vue中mixin的用法

    在项目中我们经常会遇到多个组件调用同一个方法的问题,为了避免每次都在.vue文件中定义并调用,我们可采用vue的mixin的用法: 具体使用如下: 我们需要在main.js中引入mixins文件夹下的 ...

随机推荐

  1. java使用face++简单实现人脸识别注册登录

    java使用face++简单实现人脸识别注册登录 前言 人脸识别,好高大上!!! 理解之后很简单. 支付宝使用的就是face++, 至于face++账号信息,apikey…..,本文不做讲述,网上很多 ...

  2. CentOS添加使用

    在本机安装虚拟机,虚拟机安装CentSO.也可以装双系统,双系统问题更多 环境:win7 64 位 1.查看电脑是否可虚拟化(在百度查) 2.查看电脑是否打开虚拟机设置,如果没有,百度如何开启 打开虚 ...

  3. 【洛谷P1886】滑动窗口——单调队列

    没想到啊没想到,时隔两个月,我单调队列又懵了…… 调了一个小时,最后错在快读,啊!!!!(不过洛谷讨论真好啊,感谢大佬!) 考前就不推新东西了,好好写写那些学过的东西 题目点这里(我就不粘了自己点一下 ...

  4. 洛谷 P1273 有线电视网 题解

    题面 按照常见树形背包定义状态:设dp[u][j]表示在以u为根的子树中,选择j个客户所能获得的最大收益. 状态转移:dp[u][j]=max(dp[u][j-k],dp[v][k]-w(u,v)); ...

  5. RabbitMQ入门教程(十一):消息属性Properties

    原文:RabbitMQ入门教程(十一):消息属性Properties 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://b ...

  6. [转载]Jupyter notebook调试

    原文来自:https://blog.csdn.net/dlhlsc/article/details/84309410 jupyter的调试是通过python自带的pdb库来实现的. 下面讲一下在not ...

  7. Vue中的组件直接的通信是如何实现的

    组件关系可分为父子组件通信.兄弟组件通信 1.父组件传子组件 通过props属性来实现 2.子组件传父组件 子组件用$emit()来触发事件,父组件用$on()来监听子组件的事件 3.兄弟之间的通信 ...

  8. vuex的简单理解

    初次接触vuex,谈谈我自己的理解.有待后期改进 首先要知道,Vuex 是专门为 Vue.js 设计的状态管理库.我们知道在用vue.js进行前端项目开发时,会出现很多组件相互之间调用属性.状态,小项 ...

  9. redis删除主从节点

    1.删除一个Slave节点 ./redis-cli --cluster del-node 127.0.0.1:7001 74957282ffa94c828925c4f7026baac04a67e291 ...

  10. Matlab 中 Data-driven 风格的 API 设计

    设计 所谓 data-driven API,指的是用户可以把"操作"作为参数,传入函数,像下面这种: stream = dataStream('load', 'example.cs ...