简介
Vue.js是一个JavaScript框架,旨在使开发者在开发过程中不被繁琐的DOM操作束缚,可以专心于逻辑层的操作。Vue是一个渐进式的框架,其核心库只关心视图的表现。
官网:https://cn.vuejs.org
简单上手(Hello Vue)
下面我们先来写一个简单的Hello Vue来看看Vue的基本语法和框架是长什么样的。
<div id="app">
</div>
var vm = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
从上面的代码我们可以看到,Vue采用类似模版引擎的方式将文本渲染在DOM中,我们主要看看JavaScript部分的代码,当我们引入Vue.js
这个文件后,我们就有了一个叫Vue的构造函数
,所以我们想要使用Vue的时候,必须要先实例化一个对象。我们看到在app这个实例化对象中,主要有两个属性,一个 el
,另一个是 data
,el顾名思义就是 element
的缩写,即这里面应该写的是DOM元素,我们看到,上面代码是以选择器 的形式写的,ele里是一个id选择器app。data里有一个message,里面就是我们要渲染的文本了,这就是最基本的Vue语法。
条件语句
Vue给我们提供了一套特殊的逻辑判断,可以在标签里写上 v-if
这种相当于属性的写法,并在data里声明这个属性是 true
还是false
<div id="app-3">
<p v-if="seen">这是一个例子</p>
</div>
var vm = new Vue({
el: "app-3",
data: {
seen: true
}
})
这就相当于添加了一个叫做seen的类,有则显示,无则隐藏。
循环
遍历普通数组
<div id="app">
<!-- v-for不能用于根元素 -->
<div v-for="item in list"></div>
</div>
const app = new Vue({
el: '#app',
data: {
list: [1,2,3,4,5,6]
}
})
遍历数组对象
<div id="app">
<ol>
<li v-for="todo in todos">
</li>
</ol>
</div>
var app4 = new Vue({
el: '#app',
data: {
todos: [
{ text: '吃饭饭' },
{ text: '睡觉觉' },
{ text: '打豆豆' }
]
}
})
数字迭代
<div id="app">
<!-- v-for不能用于根元素 -->
<div v-for="item in 10"></div>
</div>
const app = new Vue({
el: '#app',
})
可以使用kv对遍历
<div id="app">
<div v-for="(value, key, i) in list">--------</div>
</div>
第三个参数i一般是不写的
注意:
- v-for不能使用在根标签,也就是说不能放在渲染的第一级标签中
- 数字迭代时,是从1开始计数
v-cloak
cloak有遮掩的意思,那有什么用呢,我们在使用vue的模版时,其实会有一个问题,因为我们使用的是插值表达式,等待js脚本去渲染其中的内容,所以当我们网络比较慢时,我们会看到还未渲染的表达式,比如说``,这样就很不好,所以需要使用v-cloak
来遮挡一下,加上这个属性后,我们控制其dispaly为none,就不会看到表达式了。
[v-cloak] {
display: none;
}
<div id="app" v-cloak>
</div>
const app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
v-text
v-text
的显示效果和直接使用``来套用模版是一样的,仅有一点点的区别
-
区别一:
语法区别,v-text是直接使用
v-text=“values”的形式出现
-
区别二:
v-text
自带v-cloak
的效果,也就是说使用v-text
就不需要考虑遮盖表达式 -
区别三:
v-text
会覆盖掉标签中所有的文本内容,也就是说只会显示定义的内容。
<div id="app" v-text="message"> </div>
const app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
v-html
顾名思义就是专门用来显示html
的,语法与v-text
一样
<div id="app" v-html="message"> </div>
const app = new Vue({
el: '#app',
data: {
message: '<h1>Hello Vue!</h1>'
}
})
v-show
用来表示元素是否显示的属性,属性为boolean类型,需要再格外定义当前属性值true还是false
v-show
控制元素是否显示实际上是控制当前的display
属性
<div id="app">
<!-- 不显示是display:none -->
<p v-show="flag">
</p>
<button id="btn" @click="toggle">toggle</button>
</div>
const app = new Vue({
el: '#app',
data: {
message: '看的到我不',
flag: true
},
methods: {
toggle: function () {
this.flag = !this.flag
}
},
})
v-bind
绑定属性
使用v-bind:属性=“属性名”
eg:
v-bind:title=“my-title”
可以使用
:
来简写也就是
:title=“my-title”
<div id="app" v-bind:title="message">悬停查看</div>
const app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
绑定样式
用v-bind
可以在标签里绑定样式
- 用数组的方式列出样式
<div id="app" :class="['class1','class2']">Hello Vue!</div>
class1: {
color: skyblue;
}
class2: {
font-size: 48px;
}
- 三元表达式
<div id="app" :class="['class1', 'class2', flag? 'active': '']">Hello Vue!</div>
- 使用对象绑定样式
<div id="app" :class="{active: flag}">Hello Vue!</div>
<div id="app1" :class="{class1: true, class2: true}">Hello Vue!</div>
- 直接绑定style
<div id="app" :style="{color: 'skyblue'}">Hello Vue!</div>
<div id="app1" :style="[style1, style2]">Hello Vue!</div>
v-model
双向绑定,当绑定的值被修改,那么其变量的值也会被修改
<div id="app">
<p>
</p> <br>
<input type="text" v-model="message">
</div>
const app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!' }
})
上例中,当我们修改文本框的内容时,p标签里的内容也会被修改
v-on
用来绑定各种事件,用法是 v-on:事件=“事件名”
简写:
@:click="show"
在v-on
里我们将加入一个新的对象,methods
, 方法的定义就写在这里
<div id="app">
<p></p>
<button v-on:click="show">点击显示</button>
</div>
var vm = new Vue({
el: "#app",
data: {
message: "已点击",
seen: false
}
method: {
show: function() {
this.seen = true;
}
}
}
})
修饰符
- .stop
- .prevent
- .copture
- once
- self
跟在事件后面用用来修饰事件的修饰符。用法例如:@click.stop="show"
修饰符名 | 含义 |
---|---|
stop | 阻值一切活动(冒泡 / 捕获) |
prevent | 阻止默认行为(超链接跳转,表单提交) |
copture | 改为捕获机制 |
once | 该事件只有且仅触发一次 |
self | 阻止加上self修饰符元素的行为(冒泡 / 捕获) |
注意:
修饰符是可以多个一起连用的,例如@click.stop.once="show"