一、vue基础语法总结(三)
1.插值操作
- mustache语法:{{}}
- v-once
- v-html
- v-text
- v-pre
- v-cloak
1、{{}}:还可以使用表达式,例:{{count * 3}}
2、v-once:使用该指令的标签或组件只会被渲染一次,不会随数据的改变而改变,例:<h2 v-once></h2>
3、v-html:某些情况下,我们从服务器获取到的数据可能本身就是一段html代码,如果想要按照HTML格式进行解析,并显示相应的内容,可以使用v-html指令
- 该指令后面往往跟一个string类型
<div id='app'>
<h2 v-html="link"></h2>
</div>
data: {
link: '<a href="https://www.baidu.com">百度一下</a>'
},
4、v-text:与mustache类似,用于将数据显示在页面中,例:<h2 v-text="message"></h2>
- 通常情况下,该指令接受一个string类型
5、v-pre:显示原本的mustache语法,例:<h2 v-pre>{{message}}</h2>
—> {{message}}
6、v-cloak
2.绑定属性
指令:v-bind,用于绑定一个或多个属性值,或者向另外一个组件传递props值
<h2 v-bind:href="link"></h2> <h2 v-bind:class="cls"></h2>
语法糖 :(一个冒号)
<h2 :href="link"></h2> <h2 :class="cls"></h2>
1.v-bind绑定类
(1)对象语法:即class后跟的是一个对象(常用)
// 直接通过 {} 绑定一个类
<h2 :class="{style_pink: true}">{{message}}</h2>
// 通过判断,传入多个值
<h2 :class="{style_pink: isTrue, font_40: isTrue}">{{message}}</h2>
// 与普通类共同传入
<h2 class="title" :class="{style_pink: isTrue}">{{message}}</h2>
// 通过方法或计算属性设置较为复杂的类
<h2 :class="getClasses()">你好啊</h2>
(2)数组语法:即class后跟的是一个数组(不常用)
// 注意有无单引号的区别:字符串和变量
<h2 :class="['active','line']">{{message}}</h2>
<h2 :class="[active,line]">{{message}}</h2>
2.v-bind绑定style
// 使用语法
<h2 :style="{key(属性名):value(属性值)}">{{message}}</h2>
<!-- '50px'必须加上单引号,否则会被当成一个变量解析 -->
<h2 :style="{font-size: '50px'}">{{message}}</h2>
3.计算属性
在某些情况,我们可能需要对数据进行一些转化后再显示,或者需要将多个数据结合起来进行显示,比如我们有firstName和lastName两个变量,我们需要显示完整的名称。但是如果多个地方都需要显示完整的名称,我们就需要写多个{{firstName}} {{lastName}},此时就可以使用计算属性来完成。
计算属性是写在vue实例的computed中
看起来computed和methods都能实现我们的需求,那为什么还要使用computed?
原因就是:计算属性会进行缓存,如果多次使用,只会调用一次,而方法每使用一次就会重新调用
// 调用:无需加小号括号
<h1>{{fullName}}</h1>
computed: {
fullName () {
return this.fistName + ' ' + this.lastName
}
},
计算属性的getter和setter方法
上面代码块中fullName的定义,本质上是在定义计算属性的getter方法
computed: {
fullName: {
// setter方法基本不使用
set(item) {
console.log(item);
},
get() {
return this.fistName + ' ' + this.lastName
}
}
}
4.事件监听
指令:v-on,监听诸如点击、拖拽、键盘等事件
<button v-on:click="counter--">按钮-</button> -->
语法糖:@
<button @click="increase">按钮+</button>
通过methods定义方法时,以供click使用,需要注意参数问题
- 如果该方法不需要参数,那么方法后的
()
可以省略- 需注意:当方法本身需要一个参数而括号省略时,会将原生事件的event事件对象传入
- 如果同时需要传入某个参数和event对象时,可以通过
$event
传入 <button @click="btn3Click(option,$event)">按钮3</button>
5.条件判断
条件判断的指令后面跟的都是布尔值(true / false)
- v-if
- v-if和v-else
- v-if和v-else-if和v-else
- v-show
v-if : v-if 后面的条件为 false时,对应的元素及其子元素不会渲染,也就是不会出现在DOM中
v-if和v-else:当v-if的条件为false时,会渲染v-else所在的元素
v-if和v-else-if和v-else:原理同上
与 if、if else、if else if else原理一致
v-show
v-show与v-if非常相似,也是决定一个元素是否会被渲染到DOM中
区别在于:当v-if为false时,元素不会被渲染到DOM中
而当v-show为false时,仅仅是将元素的display属性设置为none
如何选择:当显示与隐藏频繁切换时,使用v-show
当只有一次切换时,使用v-if
6.循环遍历
指令:v-for
v-for遍历对象
<!-- 直接遍历 获取的是value属性值-->
<li v-for="item in info">{{item}}</li>
<!-- 获取 value 和 key 注意:第一个参数获取的是value,第二个是key -->
<li v-for="(value,key) in info">{{key}}-{{value}}</li>
<!-- 获取value key index -->
<li v-for="(value,key,index) in info">{{index+1}}-{{key}}-{{value}}</li>
v-for遍历数组
<!-- 遍历数组,无下标 -->
<li v-for="item in movies">{{item}}</li>
<!-- 获取下标,第一个为数组元素,第二个为下标 -->
<li v-for="(item,index) in movies">{{index}}-{{item}}</li>
关于上面两段代码中遍历参数的位置,是由vue内部实现规定的
7.表单绑定
指令:v-model
v-model指令来实现表单元素和数据的双向绑定 —> 表单元素的value值
<div id='app'>
<!-- 双向绑定 -->
<input type="text" v-model="message">
{{message}}
</div>
<script src='../../vuejs/vue.js'></script>
<script>
let app = new Vue({
el: '#app',
data: {
message: 'template',
},
});
</script>
v-model其实是一个语法糖,本质上包含两个操作(以上述代码为例):
- v-bind绑定一个属性(value)
- v-on指令给当前元素绑定事件(input)
<input type="text" v-model="message">
等价于
<input type="text" :value="message" @input=" message = $event.target.value">
v-model结合radio
<div id='app'>
<label for="male">
<input type="radio" value="男1" name="sex" id="male" v-model="choose">男
</label>
<label for="female">
<input type="radio" value="女1" name="sex" id="female" v-model="choose">女
</label>
<h2>选择了:{{choose}}</h2>
</div>
data: {
choose: ''
}
v-model结合checkbox
当只有一个复选框时:
- v-model为布尔值:true为默认选中,false为默认不选中
- 此时input的value并影响v-model的值
当有多个复选框时:
- 此时v-model对应data中的一个数组
- 当选中某一个时,就会将input的value添加到数组中
<div id='app'>
<!-- 当只有一个复选框时 -->
<label for="ckbox">
<input type="checkbox" value="此情况v-model绑定的值不受value所影响" id="ckbox" v-model="selected">同意用户协议
</label>
<h2>是否选中:{{selected}}</h2>
<!-- 当有多个复选框时,data中需要时一个数组来进行双向绑定 -->
<label><input type="checkbox" name="ball" v-model="choose" value="篮球">篮球</label>
<label><input type="checkbox" name="ball" v-model="choose" value="足球">足球</label>
<label><input type="checkbox" name="ball" v-model="choose" value="乒乓球">乒乓</label>
<label><input type="checkbox" name="ball" v-model="choose" value="排球">排球</label>
<h2>选择了:{{choose}}</h2>
</div>
data: {
selected: false,
choose: []
},
v-model结合select
和checkbox一样,select也分为单选和多选两种情况
单选:
- v-model绑定的是一个值
- 当选中option中的一个时,会将它对应的value赋值给v-model绑定的值
多选:
- v-model绑定的是一个数组
- 选中多个值时,将选中的option对应的value添加到v-model绑定的数组中