文章目录
- Hello Vue!
- el: 挂载点
- data
- methods
- vue命令
- v-text
- v-html
- v-on @
- v-show
- v-if
- v-bind
- v-for
- v-model
Hello Vue!
<!DOCTYPE html>
<html><head><title>Hello Vue!</title></head><body><div id="app">{{ message }}</div><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script>var app = new Vue({el:"#app",data:{message:"Hello Vue!"}})</script></body>
</html>
el: 挂载点
实例范围:el命中元素及其内部的后代元素
可以使用其他选择器,但是建议使用id选择器
只能支持双标签,不能使用html 和 body
data
Vue中用到的数据,定义在data中。
data中可以写复制数据类型,遵循js语法即可。
methods
放方法。
vue命令
v-text
<!DOCTYPE html>
<html><head><title>Hello Vue!</title></head><body><div id="app"><h2 v-text="message + '123'"></h2><h3 v-text="info+'!'"></h3><h4>{{ message + '!'}}</h4></div><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script>var app = new Vue({el:"#app",data:{message:"Hello Vue!",info:"这是一个vue"}})</script></body>
</html>
v-html
放html文本而已。
和js一样。
v-on @
v-on可以用@代替
主要学习与jquery不同的,不是用dom操作来改变,而是直接操纵数据。
数据改变,页面同步跟着改变。
<!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="app"><input type="button" value="点击" @click="alert"><input type="button" value="双击" @dblclick="alert"><input type="button" value="移入" @mouseenter="alert"><input type="button" value="点击添加" @click="addone"><h3>{{ num }}</h3></div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>var app = new Vue({el:"#app",data:{num:"+1"},methods: {alert:function(){alert("你好")},addone:function(){this.num+="+1"}}})
</script>
</html>
监听回车:
<!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="app"><input type="text" @keyup.enter="alt"></div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>var app = new Vue({el:"#app",methods:{alt:function(){alert("释放按下触发的弹出")}}})
</script>
</html>
v-show
是否显示。
true,false两个值,一般用变量来写,方便我们控制。
也可以用表达式><=等。
<!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>img {width:100px;height: 100px;}</style>
</head>
<body><div id="app"><input type="button" value="切换显示状态" @click="change"><img src="../2023.12.15/6D5ED8A27DD04CD72FAC750E2295B6B1.jpg" alt="" v-show="flag"></div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>var app = new Vue({el:"#app",data:{flag:true},methods:{change:function(){this.flag ^= true;}}})
</script>
</html>
v-if
与v-show相似,但是v-show是改变的样式,而v-if是直接从dom中删除和添加。
切换频繁的用v-show,不频繁发用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><style>img {width:100px;height: 100px;}</style>
</head>
<body><div id="app"><input type="button" value="切换显示状态" @click="change"><img src="../2023.12.15/6D5ED8A27DD04CD72FAC750E2295B6B1.jpg" alt="" v-if="flag"></div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>var app = new Vue({el:"#app",data:{flag:true},methods:{change:function(){this.flag ^= true;}}})
</script>
</html>
v-bind
v-bind:设置元素的属性。
可简写成:直接。
可用三元表达式,不过推荐用对象的写法。
例子:
切换img的类名,使其加上边框,和取消边框。
<!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>img {width:100px;height: 120px;}.active {border: 1px solid red;}</style>
</head>
<body><div id="app"><input type="button" value="点击切换class" @click="change"><img :src="imgSrc" alt="" v-bind:class="isActive?'active':''"><img :src="imgSrc" alt="" :class="{active:isActive}"></div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>var app = new Vue({el:"#app",data:{isActive:false,imgSrc:"OIP-C.jpg"},methods:{change:function(){this.isActive ^= true}}})
</script>
</html>
v-for
遍历数组,循环填充。
(item, idx) in arr
也可以只写item
<!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="app"><ul><li v-for="(item, idx) in arr">{{ idx }}样例{{ item }}</li><li v-for="item in arr2">{{ item.name }}</li></ul></div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>var app = new Vue({el:"#app",data:{arr:["北京","上海","河北", "天津"],arr2:[{"name": "小红"},{"name": "小明"}]}})
</script>
</html>
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="app"><input type="text" v-model="msg" @keyup.enter="alt"><h3>{{ msg }}</h3></div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>var app = new Vue({el:"#app",data:{"msg":"默认值"},methods:{alt:function() {alert(this.msg);}}})
</script>
</html>