HOME
NAVIGATION

每天学点Vue(2)-- v-bind、v-if、v-on、过滤器、v-else

v-bind 控制HTML的属性

冒号后的是指令.

注意!!冒号前后别打空格!不然代码无效

HTML

<\div v-bind:id = "'list-' + id">Hello, World!<\/div>

CSS

#list-1{
color:red
}

JS

var vm = new Vue({
el:"#app",
data:{
id : 1
}
})

v-bind指令也可以缩写,比如上面的可以改成

<\div :id="'list-' + id">Hello, World!<\/div>

算是给这个经常用到的指令的福利吧

指令v-if 例子是根据seen的值判断是否要让元素显示

HTML

<\div id="app">
<\p v-if="seen">now you can't see me<\/p>
<\/div>

JS

var vm = new Vue({
el:"#app",
data:{
seen: false
}
})

v-on监听事件,对用户的操作进行响应

html

<\div id="app">
<\p>{{ message }}<\/p>
<\button v-on:click="reverseMessage">反转字符串<\/button>
<\/div>

js

var vm = new Vue({
el:"#app",
data:{
message:"hello, world!"
},
methods:{
reverseMessage:function () {
this.message = this.message.split('').reverse().join('')
}
}
})

点击后:!dlrow ,olleh

一点旁白。。。

如果

this.message = this.message.split('').reverse()

没有加上.join(''), 那还是和昨天使用的,直接在message上写方法一样,返回

[ "!", "d", "l", "r", "o", "w", " ", ",", "o", "l", "l", "e", "h" ]一个字符串数组

v-on也有一个简写形式,比如上式可以改成

<\button @click="reverseMessage">反转字符串<\/div>

过滤器

html

<\div id="app">
<\p>{{ message | capitalize }}<\/p>
<\/div>

js

var vm = new Vue({
el:"#app",
data:{
message:"hello, world!"
},
filters:{
capitalize: function (value) {
if(!value){
return ""
} else {
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
}
}
})

charAt(0),取得了第一个字符,并把它变成大写,再和后续字符链接。

过滤器可以串联

如:
{{ message | filterA | filterB }}

也可以接受参数
{{ message | filterA('arg1', arg2)}}

v-if v-else指令

html

<\div id="app">
<\div v-if="Math.random()>0.5">{{ message1 }}<\/div>
<\div v-else>{{ message2 }}<\/div>
<\/div>

js

var vm = new Vue({
el:"#app",
data:{
message1:"hello, world!",
message2:"sorry"
}
})

Math.random()取0.0到1.0之间的一个随机数

vue2.1以后还增加了一个v-if的else-if块,可以链式的多次使用:

<\div id="example-1">
<\div v-if="type === 'A'">{{ messageA }}<\/div>
<\div v-else-if="type === 'B'">{{ messageB }}<\/div>
<\div v-else="type === 'C'">{{ messageC }}<\/div>
<\/div>


var vm = new Vue({
el:"#example-1",
data:{
messageA:"i am A",
messageB:"i am B",
messageC:"i am C",
type : "B"
}
});

打印出的是:i am B