目录
三、基本语法-条件渲染 v-if/v-else/v-show
四、基本语法-列表渲染(v-for="e in eList")
一、基本介绍
声明式渲染:
『声明式』是相对于『编程式』而言的。
- 声明式:告诉框架做什么,具体操作由框架完成
- 编程式:自己编写代码完成具体操作
渲染:
- 蓝色方框:HTML标签
- 红色圆形:动态、尚未确定的数据
- 蓝色圆形:经过程序运算以后,计算得到的具体的,可以直接在页面上显示的数据、
- 渲染:程序计算动态数据得到具体数据的过程
演示:
需要引入vue.js,让js初始化时new一个Vue对象出来。本来想引入Thymeleaf设置路径的,但发现引入后vue就失效了,可能是有冲突吧。
<html>
<head>
<meta charset="UTF-8">
<title>VUE</title>
<script language="JavaScript" src="../../static/script/vue.js"></script>
<script language="JavaScript">
window.onload=function () {
var vue=new Vue({
// el用于指定Vue对象要关联的HTML元素。el就是element的缩写
// 通过id属性值指定HTML元素时,语法格式是:#id
el:"#msg",
// data属性设置了Vue对象中保存的数据
data:{
message:"hello,WZ!"
}
})
}
</script>
</head>
<body>
<!-- 使用{{}}格式,指定要被渲染的数据 -->
<div id="msg">{{message}}</div>
</body>
</html>
通过验证Vue对象的『响应式』效果,我们看到Vue对象和页面上的HTML标签确实是始终保持着关联的关系。
二、基本语法-绑定属性
2.1 绑定元素属性 v-bind/{{ }}
语法:
一、标签属性
v-bind : HTML标签的原始属性名 可省略为 : HTML标签的原始属性名
二、标签体内{{ HTML标签的原始属性名 }}
举例:
<head>
<meta charset="UTF-8">
<title>VUE</title>
<script language="JavaScript" src="../../static/script/vue.js"></script>
<script language="JavaScript">
window.onload=function () {
var vue=new Vue({
el:"#msg",//绑定id
data:{
message1:"hello,Vue!", //指定要渲染的内容
message2:"hello,Vue!"
}
});
}
</script>
</head>
<body>
<div id="msg">
<div>{{message1}}</div> //标签体
<input type="text" :value="message2"> //标签属性
</div>
</body>
2.2 双向绑定元素属性 v-model
何为双向?
使用了双向绑定后,就可以实现:页面上数据被修改后,Vue对象中的数据属性也跟着被修改
语法:
v-mode:HTML标签的原始属性名 = ”... ...“
可省略为:
v-mode= "... ..."
举例:
<script language="JavaScript">
window.onload=function () {
var vue=new Vue({
el:"#demo",
data:{
vueValue:"yyds"
}
});
}
</script>
... ...
<div id="demo">
<!-- v-bind:属性名 效果是从Vue对象渲染到页面 -->
<!-- v-model:属性名 效果不仅是从Vue对象渲染到页面,而且能够在页面上数据修改后反向修改Vue对象中的数据属性 -->
<input type="text" v-model:value="vueValue" />
<input type="text" v-model="vueValue" />
<p>{{vueValue}}</p>
</div>
此时,如果修改了 <input> 标签内的值,那么 <p> 标签的内容也会改变
2.2.1 .trim修饰符
加在v-model后,可以将文本前后的空格去掉。
<input type="text" v-model.trim="vueValue" />
三、基本语法-条件渲染 v-if/v-else/v-show
根据Vue对象中数据属性的值来判断是否对HTML页面内容进行渲染。
3.1 v-if
<script language="JavaScript">
window.onload=function () {
var vue=new Vue({
el:"#demo",
data:{
condition:true //指定条件为true
}
});
}
</script>
... ...
<div id="demo">
<img v-if="condition" src="/images/1.jpg" /> //如果条件为true,加载图片1
<img v-if="!condition" src="/images/0.jpg" /> //如果条件为false,加载图片0
</div>
3.2 v-if 和 v-else
类似于if else
<script language="JavaScript">
window.onload=function () {
var vue=new Vue({
el:"#demo",
data:{
condition:true //指定条件为true
}
});
}
</script>
... ...
<div id="demo">
<img v-if="condition" src="/images/1.jpg" /> //如果条件为true,加载图片1
<img v-else="condition" src="/images/0.jpg" /> //如果条件不为true,加载图片0
</div>
3.3 v-show
v-show通过其隐藏的display属性来控制标签是否显示
<div id="demo">
<img v-show="condition" src="/images/beauty.jpg" />
</div>
四、基本语法-列表渲染(v-for="e in eList")
4.1 迭代普通数组
假设给出一个颜色数组,依次输出每个颜色名字:
<script language="JavaScript">
window.onload=function () {
var vue=new Vue({
el:"#demo",
data:{
colorList: [
"red",
"green",
"blue",
"pink",
"white"
]
}
});
}
</script>
... ...
<div id="demo">
<ul>
<!-- 使用v-for语法遍历数组 -->
<!-- v-for的值是语法格式是:引用数组元素的变量名 in Vue对象中的数组属性名 -->
<!-- 在文本标签体中使用{{引用数组元素的变量名}}渲染每一个数组元素 -->
<li v-for="color in colorList">{{color}}</li>
</ul>
</div>
4.2 迭代对象数组
输出员工表中每个员工的信息:
<script language="JavaScript">
window.onload=function () {
var vue=new Vue({
el:"#demo",
data:{
employeeList:[
{
"empId":11,
"empName":"tom",
"empAge":111,
"empSubject":"java"
},
{
"empId":22,
"empName":"jerry",
"empAge":222,
"empSubject":"php"
},
{
"empId":33,
"empName":"bob",
"empAge":333,
"empSubject":"python"
}
]
}
});
}
</script>
... ...
<div id="demo">
<table>
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>专业</th>
</tr>
<tr v-for="employee in employeeList">
<td>{{employee.empId}}</td>
<td>{{employee.empName}}</td>
<td>{{employee.empAge}}</td>
<td>{{employee.empSubject}}</td>
</tr>
</table>
</div>
五、基本语法-事件驱动(v-on:事件名/@事件名)
语法:
v-on:事件名="... ..." 或者 @事件名="... ..."
例如:
<div id="app">
<p>{{message}}</p>
<!-- v-on:事件类型="事件响应函数的函数名" -->
<button @click="reverseMessage">Click me to reverse message</button>
</div>
为了响应这些事件,要在js代码块中定义对应的函数:
<script language="JavaScript">
window.onload=function () {
var vue= new Vue({
el:"#app",
data:{
message:"Hello Vue!"
},
methods: {
reverseMessage: function () {
this.message = this.message.split("").reverse().join("");
}
}
});
}
</script>
</head>
六、基本语法-侦听属性 watch
所谓『侦听』,就是对message属性进行监控,当属性的值发生变化时,调用我们准备好的函数。
格式:
<script language="JavaScript">
window.onload=function () {
var vue= new Vue({
el:"#xxx",
data:{
... ...
},
"watch":{
属性1:function (newVal) {
操作1
},
属性2:function (newVal) {
操作2
}
}
});
}
</script>
我们可以实现一个简单的加法器
<script language="JavaScript">
window.onload=function () {
var vue= new Vue({
el:"#app",
data:{
num1:"1",
num2:"1",
res:"0"
},
"watch":{
num1:function (newVal) {
this.res=parseInt(newVal)+parseInt(this.num2)
},
num2:function (newVal) {
this.res=parseInt(newVal)+parseInt(this.num1)
}
}
});
}
</script>
... ...
<div id="app">
<input type="text" v-model="num1"><br/>
<input type="text" v-model="num2"><br/>
结果:<span>{{res}}</span>
</div>
效果: