一、遮罩 隐藏
点击隐藏后
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style></style>
</head>
<body>
<div id="app">
<!-- css 隐藏元素:通过 display: none; -->
<p style="display: none;">这是一段消息</p>
<!-- show:显示,出现 -->
<p v-show="true">这是一段true消息</p>
<p v-show="false">这是一段false消息</p>
<p v-show="show">这是一段消息</p>
<button @click="doShow">显示</button>
<button @click="doHide">隐藏</button>
</div>
<script src="../vendor/vue.js"></script>
<script>
new Vue({
el:"#app",
data:{
show:true
},
methods:{
doShow(){this.show=true},
doHide(){this.show=false},
},
})
</script>
</body>
</html>
二、pre
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<!-- pre: 原样输出, 忽略 vue 关键词 -->
<div id="app">
<p v-pre>使用{{name}}可以输出vue中的name变量</p>
<div>
<!-- v-pre 专门针对 {{}} 语法, 让标签中的此语法不解析 -->
<span v-pre>{{name}}</span>
<span v-text="{{name}}"></span>
<span>的值是{{name}}</span>
</div>
</div>
<script src="./vendor/vue.js"></script>
<script>
一一次性渲染
双双向向数数据据绑绑定定
new Vue({
el: "#app",
data: { name: "Lucy" },
})
</script>
</body>
</html>
三、一次性渲染
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<!-- 一次性: 值的变化只更新一次 DOM, 后续不会修改 -->
<div id="app">
<h3 v-once>页面显示时间: {{time}}</h3>
<h3>当前系统时间: {{time}}</h3>
</div>
<script src="./vendor/vue.js"></script>
<script>
var vm = new Vue({
el: "#app",
data: {
time: new Date().toLocaleString(),
},
})
console.log(vm)
// 定时器更新时间
setInterval(() => {
vm.time = new Date().toLocaleString()
}, 1000)
</script>
</body>
</html>
四、双向数据绑定
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<!--
输输入入框框内内容容实实时时监监听听
双向数据绑定:
1. 方向1 - 数据绑定到DOM元素上
2. 方向2 - 表单元素:输入框, 单选框, 多选框, 下拉框... 用户可以操作 来修改其值 -- 把用户操作的值
更新给数据
简单说: DOM变化 更新绑定的数据
-->
<div id="app">
<!-- form表单元素: 特色是 与用户可以交互 -->
<!-- 用v-model 替代 value 属性 -->
<!-- v-model: 数据绑定值的同时, DOM变化也会修改变量 -->
<input type="text" v-model="uname" />
<div>{{uname}}</div>
<hr />
<!-- 用途: 获取输入框的值 -->
<input type="password" v-model="upwd" />
<button @click="doLogin">登录</button>
</div>
<script src="./vendor/vue.js"></script>
<script>
new Vue({
el: "#app",
data: { uname: "liang", upwd: "" },
methods: {
doLogin() {
// 由于双向绑定的存在, 变量的值 一定和DOM元素的值相同
console.log("用户名:", this.uname)
console.log("密码:", this.upwd)
},
},
})
</script>
<!-- v-model: 用来快速获取 form 表单元素的值, 因为双向绑定可以确保 DOM元素 的值和 变量的值 一定相
同! -->
</body>
</html>
五、输入框内容实时监听
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div id="app">
<!- 双向数据绑定:
1. 数据 显示到 DOM 元素中
2. 用户修改DOM元素的值 实时更新到 绑定的数据项
-->
<!-- @input: 输入框内容变化时 触发 -->
<input type="text" v-model="word" @input="wordChanged" />
<p>{{word}}</p>
</div>
键键盘盘事事件件监监听听
<script src="./vendor/vue.js"></script>
<script>
new Vue({
el: "#app",
data: { word: "111" },
methods: {
wordChanged() {
console.log(this.word)
},
},
})
</script>
</body>
</html>
六、键盘事件监听
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div id="app">
<input type="text" v-model="word" @keyup="doEnter" />
<hr />
<!-- 作者知道 用户通常需要过滤 keyCode, 所以提供了简化写法
@keyup.13: 会自动过滤出 keyCode=13的 事件
-->
<input type="text" v-model="word" @keyup.13="doEnter1" />
<p>{{word}}</p>
</div>
<script src="./vendor/vue.js"></script>
<script>
new Vue({
el: "#app",
data: { word: "111" },
methods: {
doEnter1() {
console.log("回车触发:", this.word)
},
doEnter(e) {
if (e.keyCode == 13) {
// console.log(e)
console.log("回车触发:", this.word)
}
},
},
})
</script>
</body>
</html>
七、watch监听器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div id="app">
<div>
<span>{{count}}</span>
<button @click="changeCount(+1)">+1</button>
<button @click="changeCount(-1)">-1</button>
<br />
<input type="text" v-model="count" />
</div>
</div>
<script src="./vendor/vue.js"></script>
<script>
new Vue({
el: "#app",
data: { count: 5 },
methods: {
changeCount(delta) {
// 字符串转数字: parseInt(字符串) Number(字符串)
// 取巧: *1 隐式转换: 乘法的结果必定是数字
this.count = this.count * 1 + delta
},
},
// watch: 监听器. 监听data中属性的变化
watch: {
// 要监听的属性名: 变化时触发的事件
// count: function () {
// console.log("侦测到 count 发生变更:", this.count)
// },
// 简化: 去掉 function 关键词
count() {
console.log("侦测到 count 发生变更:", this.count)
},
},
})
</script>
</body>
</html>
八、单选框
<body>
<div id="app">
<span>性别:</span>
<!-- label: 此标签会接受点击事件, 传递给内部的 单选框 -->
<!-- name相同的单选框, 会被识别为一组 -->
<label
><input type="radio" value="1" name="sex" v-model="sex" /> 男</label
>
<label
><input type="radio" value="0" name="sex" v-model="sex" /> 女</label
>
<br />
<h3>您选择的性别是: {{sex}}</h3>
</div>
<script src="./vendor/vue.js"></script>
<script>
new Vue({
el: "#app",
data: { sex: 0 },
})
</script>
</body>
九、下拉选框
根据城市的不同变更图片
!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div id="app">
<span>请选择城市:</span>
<select v-model="target">
<option value="./img/1.jpg">上海</option>
<option value="./img/2.jpg">北京</option>
<option value="./img/3.jpg">深圳</option>
</select>
<div>选择的图片:{{target}}</div>
<img :src="target" alt="" />
</div>
<script src="./vendor/vue.js"></script>
<script>
new Vue({
el: "#app",
// 默认值:
data: { target: "./img/1.jpg" },
})
</script>
</body>
</html>
十、多选框
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div id="app">
<span>选择你喜欢的队伍:</span>
<label>
<input type="checkbox" value="FPX" v-model="teams" />
<span>FPX</span>
</label>
<label>
<input type="checkbox" value="EDG" v-model="teams" />
<span>EDG</span>
</label>
<label>
<input type="checkbox" value="RNG" v-model="teams" />
<span>RNG</span>
</label>
<p>喜欢的队伍有: {{teams}}</p>
</div>
<script src="./vendor/vue.js"></script>
<script>
new Vue({
el: "#app",
// 多选操作: 需要数组来存放选项
data: { teams: [] },
})
</script>
</body>
</html>
十一、多选框单独使用
点击选项框 按钮才可用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div id="app">
<label>
双双向向绑绑定定练练习习
<input type="checkbox" v-model="agree" />
<span>同意软件的用户协议</span>
</label>
<br />
<p>{{agree?'同意':"不同意"}}</p>
<button :disabled="!agree">注册</button>
</div>
<script src="./vendor/vue.js"></script>
<script>
new Vue({
el: "#app",
// agree: 同意 - 输入框单独使用, 应该绑定boolean值
data: { agree: false },
})
</script>
</body>
</html>