v-model
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="box">
<h1>v-model指令主要是用于表单上数据的双向绑定</h1>
<h2>
v-model可以完成双向绑定模型和视图 模型变了--->视图就会自动发生改变
视图变了--->模型也会自动发生改变
</h1>
<input type="text" v-model="text">
<h1>{{text}}</h1>
<h1>{{text}}</h1>
<h1>{{text}}</h1>
<h1>{{text}}</h1>
</div>
</body>
</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
new Vue({
el: "#box",
data: {
text: "你好么么哒",
}
})
</script>
双向绑定原理:
1.数据劫持:当我们访问或设置对象的属性的时候,都会触发**Object.defineProperty()**函数来拦截(劫持),然后在返回(get)或设置(set)对象的属性的值。并且当数据发生改变的时候做出反应。
发布者-订阅者模式:其定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。
v-show
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="box">
<h1>v-show指令</h1>
<!-- v-show指令
作用:控制切换一个元素的显示和隐藏
语法:v-show = 表达式
根据表达式结果的真假,确定是否显示当前元素
true表示显示该元素,false(默认)表示隐藏该元素
元素一直存在只是被动态设置了display:none -->
<h1 v-show="bool">我是测试显示和隐藏的</h1>
<hr>
<h1>小练习,我有一个复选框,勾选的时候下面的内容显示,取消勾选下面的内容隐藏</h1>
<input type="checkbox" v-model="ck">{{ck?'勾选了':"取消了"}}
<h1 v-show="ck">小练习占位的</h1>
</div>
</body>
</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
new Vue({
el: "#box",
data: {
bool: true,
ck: true //(0和-0都为false)
}
})
</script>
v-on
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="box">
<h1>v-on指令</h1>
<!-- 作用:为HTML元素绑定事件监听
语法:v-on:事件名称="函数名称()"
简写语法:@事件名称="函数名称()"
注:函数定义在 methods 配置项中 -->
<button v-on:click="fun1()">点我弹出弹出框哦</button>
<button @click="fun2()">我是简写的</button>
</div>
</body>
</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
new Vue({
el: "#box",
data: {
},
//函数要写在与 el data同级的位置使用methods来设置
methods: {
fun1() {
alert("我是第一个按钮")
},
fun2() {
alert("我是第2个按钮")
}
}
})
</script>
v-for
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="box">
<h1>v-for指令</h1>
<!-- 作用:遍历 data 中的数据,并在页面进行数据展示
语法:v-for = "(item, index) in arr" item 表示每次遍历得到的元素
index 表示item的索引(下标),可选参数 -->
<ul>
<li v-for="(v,i) in arr">
{{v}}------{{i}}
</li>
</ul>
<hr>
<table border="1" cellspacing="0" cellpadding="0">
<tr v-for="(v,i) in obj">
<td>{{v.name}}</td>
<td>{{v.age}}</td>
</tr>
</table>
</div>
</body>
</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
new Vue({
el: "#box",
data: {
arr: ["EZ", "MF", "NOC", "VN"],
obj: [{
name: "xixi1",
age: 30
}, {
name: "xiaoming",
age: 20
}, {
name: "bingbing",
age: 10
}, {
name: "xiaowang",
age: 15
}, {
name: "xiaohong",
age: 25
}, {
name: "xiaohua",
age: 30
}, ]
}
})
</script>
v-bind
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="box">
<h1>v-bind指令</h1>
<!-- 作用: 绑定 HTML 元素的属性
给html标签的属性插入变量
语法: v-bind:属性名 = "表达式"
简写: 属性名="表达式"
绑定一个属性:
<img v-bind:src="myUrl" />
绑定多个属性(不能使用简写):
<img v-bind="{src:myUrl, title: msg}" /> -->
<a v-bind:href="ahref">{{atext}}</a>
<a :href="ahref">66666{{atext}}</a>
</div>
</body>
</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
new Vue({
el: "#box",
data: {
ahref: "http://www.baidu.com",
atext: "点我去百度"
}
})
</script>
v-if全家桶
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="box">
<h1>v-if指令</h1>
<!-- 作用:判断是否加载固定的内容
语法:v-if = "表达式"
根据表达式结果的真假,确定是否显示当前元素
true表示加载该元素,false表示不加载该元素
元素的显示和隐藏是对Dom元素进行添加和删除 -->
<input type="checkbox" v-model="bool">
<!-- v-show与v-if区别:
v-if有更高的切换消耗(安全性高)
v-show有更高的初始化的渲染消耗(对安全性无要求选择) -->
<p v-show="bool">我是用v-show的例子</p>
<p v-if="bool">我是用v-if的例子</p>
</div>
</body>
</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
new Vue({
el: "#box",
data: {
bool: true
}
})
</script>
v-else
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="box">
<h1>v-else指令</h1>
<!-- 坑1:v-else必须配合v-if使用
坑2:v-if与v-else之间不能有多余的内容 -->
<p v-if="bool">请登录</p>
<!-- <h1>你好么么哒</h1> -->
<p v-else>欢迎您</p>
</div>
</body>
</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
new Vue({
el: "#box",
data: {
bool: false
}
})
</script>
v-else-if
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="box">
<h1>v-else-if指令</h1>
<!-- 作用:当有一项成立是执行 -->
<select v-model="text">
<!-- 下拉框的option里面的value作用就是:把选中的value发给后台
<input type="text"name="给后台发送数据的名字" value="给后台发送的值"> -->
<option value="吃饭饭">吃饭饭</option>
<option value="喝水水">喝水水</option>
<option value="睡觉觉">睡觉觉</option>
<option value="打豆豆">打豆豆</option>
</select>
<h1 v-if="text=='吃饭饭'">您选择了吃饭饭</h1>
<h1 v-else-if="text=='喝水水'">您选择了喝水水</h1>
<h1 v-else-if="text=='睡觉觉'">您选择了睡觉觉</h1>
<h1 v-else-if="text=='打豆豆'">您选择了打豆豆</h1>
<h1 v-else>您啥都没选择</h1 tml>
</div>
</body>
</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
new Vue({
el: "#box",
data: {
text: ""
}
})
</script>
v-text
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
/* 解决屏幕闪动 */
[v-cloak] {
display: none;
}
</style>
</head>
<body>
<div id="box" v-cloak>
<h1>v-text指令向网页中插入文本内容</h1>
<!-- 作用:操作网页元素中的纯文本内容,{{}}是它的另一种写法 -->
<!--2、 v-text与{{}}区别:
v-text与{{}}的等价,{{}}叫做模板插值,v-text叫指令,有一点区别就是在渲染的数据比较多的时候,可能会把大括号显示出来,俗称屏幕闪动 -->
<!--2、 解决屏幕闪动的方式:
(1)使用v-text渲染数据(不建议使用这个方法)
(2)使用{{}}语法渲染数据,但是同时使用v-cloak指令(用来保持在元素上直到关联实例结束时候进行编译),v-cloak并不需要添加到每个标签,只要在el挂载的标签上添加就可以了 -->
<h1 v-text="text"></h1>
<h1>{{text}}</h1>
</div>
</body>
</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
new Vue({
el: "#box",
data: {
text: "么么哒"
}
})
</script>
v-heml与v-once
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
/* 解决屏幕闪动 */
[v-cloak] {
display: none;
}
</style>
</head>
<body>
<div id="box" v-cloak>
<!-- <h1>v-html指令</h1>
作用:双大括号会将数据解释为纯文本,而非HTML,为了输出真正的HTML则需要使用v-html指令
语法:<p v-html="text"></p>
在工作的时候数据都是由后台返回前台 -->
{{html}}
<h1 v-html="html"></h1>
<hr>
<h1>v-once指令 一次性插值</h1>
<!-- 作用:当数据改变是,插值处的内容不会更新(会影响到该节点上的所有属性)
语法:<p v-once>{{text}}</p> -->
<input type="text" v-model="text">
<h1>{{text}}</h1>
<h1 v-once>{{text}}</h1>
<h1>{{text}}</h1>
</div>
</body>
</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
new Vue({
el: "#box",
data: {
html: "<h1>超级无敌大帅锅</h1>",
text: "我是默认值哦"
}
})
</script>