vue指令
vue指令
这章介绍的是vue的一些指令,是以“v-”开头的指令,它的值预估是单个
JavaScript表达式(v-for例外)。指令的作用是在表达式的值改变的时候,
将产生的影响,响应的作用在DOM上。
v-if、v-else和v-else-if
使用场景:我们需要进行条件判断来决定这个元素是否显示的时候,就需要用到这些指令。
有v-else指令的元素必须跟在带有v-if或者v-else-if的元素后面,否则将不会被识别
使用方法:
<div id="app">
<div v-if="param">
登陆成功 <!--param的值为true的时候-->
</div>
<div v-else>
请登录 <!--param的值为false的时候-->
</div>
</div>
var vue = new Vue({
el: "#app",
data: {
param: true
}
});
v-else-if 是在2.1.0版本新增的一个指令。学过c,c++,java语言的都应该可以理解,也就是否则如果,可以连续使用,该指令也是只能跟在v-if后面。
使用方法:
<div id="app">
<div v-if="param===0">
<!--param的值为0的时候-->
</div>
<div v-else-if="param===1">
<!--param的值为1的时候-->
</div>
<div v-else-if="param===2">
<!--param的值为2的时候-->
</div>
<div v-else>
<!--param的值是非1,非2,非0的时候-->
</div>
</div>
var vue = new Vue({
el: "#app",
data: {
param: 0
}
});
v-show和v-once
v-show指令也是用于条件展示的,用法和v-if一样,只不过没有v-else指令在后面。
不同的是带有v-show的元素是一开始就会被渲染并保留在DOM中,它是决定的是css属性display来显示或者不显示元素。而v-if是条件渲染,为真才渲染,若为假是不会渲染出相应的元素的,也就是为假的时候DOM上是找不到该元素的。
v-once顾名思义,一次性的插值。
此时渲染结果为 Hello!,若是后期我们把message的值改为Hello,world!,元素p里的内容还是Hello!,不会随着data里的message的改变而改变
v-text和v-html
v-text的作用等价于两个双括号,用两个双括号不好的地方是当网速很慢或者js报错的时候,会直接显示两个双括号,但是使用v-text就不会,所以在实际开发的时候,建议使用v-text。
<div id="app">
<p>{{message}}</p> == <p v-text="message"></p>
</div>
var vue = new Vue({
el: "#app",
data: {
message: "Hello!"
}
});
v-html: 会将元素当成html标签解析然后输出。
<div id="app">
<p v-text="message"></p>
<p v-html="message"></p>
</div>
var vue = new Vue({
el: "#app",
data: {
message: "<h1>hello</h1>"
}
});
输出结果为:
注意: 在站点上动态的渲染任意的HTML可能会很危险,因为它很容易导致XSS攻击,所以最好慎用。
v-bind
v-bind一般用来绑定元素属性,属性值可以是字符串,对象或数组。可以用来绑定class、style或者是图片,链接的地址属性src、href等。v-bind可以简写成“:”。
<style>
.fd-head {
color: red;
}
.fd-nav {
background-color: yellow;
}
.active {
font-size: 20px;
}
.text-danger {
color: red;
border: 1px solid '#000';
}
</style>
<div id="app">
<h1>1. 绑定到src和href属性上</h1>
<img v-bind:src="imgSrc">
<a :href="url">github传送门</a>
<h1>2. 绑定到样式</h1>
<div :class="{'fd-head':isOk, 'active':isActive}">
<p>(1)一般绑定方法</p>
字体为红色
</div>
<div class="fd-nav" :class="{'fd-head':isOk, 'active':isActive}">
<p>(2)v-bind:class也可以与普通的class属性共存</p>
字体为红色且背景颜色为黄色
</div>
<div :class="isTrue?fd-head:active">
<p>用三元运算符来选择样式,字体大小为20px</p>
</div>
<div :class="[activeClass,errorClass]">
绑定到数组
</div>
<h1>3. 绑定内联样式style</h1>
<h2>对象语法</h2>
<div :style="{color:activeColor,fontSize:fontSize + 'px','background-color':bgcolor}">
(1)我们给:style赋值的是一个对象,该对象语法看上去有点像css,但其实是一个JavaScript对象,css的属性名可以用驼峰式,这样就需要用括号括起来,或者用短横线分隔,这样就需要用括号括起来。
</div>
<div :style="styleObj1">
<p>(2)或者我们直接绑定到一个样式对象,这样比较简单明了。
</div>
<h2>数组语法</h2>
<div :style="[styleObj1,styleObj2,styleObj3]">
<p>数组语法可以将多个样式对象应用到同一个元素上。
</div>
</div>
var vue = new Vue({
el: "#app",
data: {
imgSrc: "http://2b.zol-img.com.cn/product/131/741/ceUvYp3mRk5w.jpg",
url: "https://github.com/zzilcc",
isOk: true,
isActive: false,
isTrue: false,
activeClass: 'active',
errorClass: 'text-danger',
activeColor: 'red',
'fd-head': 'fd-head',
active: 'active',
fontSize: 30,
bgcolor: 'blue',
styleObj1: {
color: 'red',
fontSize: '13px'
},
styleObj2: {
position: 'relative'
},
styleObj3: {
backgroundColor: 'blue'
}
}
})
结果为:
v-model
v-model指令主要用来在表单<input>
及<textarea>
元素上进行双向数据绑定。v-model会忽略所有表单元素的value,checked,selected特性的初始值,而总是将Vue实例的数据当做数据来源。
文本绑定
<div id="app">
<input v-model="message" placeholder="请输入">
<p> Message is : <span v-text="message"></span></p>
</div>
var vue = new Vue({
el: "#app",
data: {
message: ""
}
})