目录
一、插值
1.文本 {{msg}}
代码演示:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 导入依赖 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title></title>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p>文本</p>
{{msg}}
</div>
</body>
<script type="text/javascript">
// 创建实例
new Vue({
// 挂载实例
el:'#app',
// 变量区
data(){
return {
msg:'hello vue!!!'
}
}
})
</script>
</html>
运行结果如图所示:
2.html
使用v-html指令用于输出html代码
代码演示:
运行结果如图所示:
所以我们要用到v-html指令输出html代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 导入依赖 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title></title>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p>文本</p>
{{msg}}
<p>html页面转义</p>
<div v-html="htmlstr"></div>
</div>
</body>
<script type="text/javascript">
// 创建实例
new Vue({
// 挂载实例
el:'#app',
// 变量区
data(){
return {
msg:'hello vue!!!',
htmlstr:'<span style="color:red">文本内容</span>'
}
}
})
</script>
</html>
运行结果如图所示:
3.属性
HTML属性中的值应使用v-bind指令
运行结果:
所以说我们要用v-bind 指令
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 导入依赖 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title></title>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p>文本</p>
{{msg}}
<p>html页面转义</p>
<div v-html="htmlstr"></div>
<p>v-bind 属性绑定</p>
<input value="值" />
<input v-bind:value="valuestr" />
</div>
</body>
<script type="text/javascript">
// 创建实例
new Vue({
// 挂载实例
el:'#app',
// 变量区
data(){
return {
msg:'hello vue!!!',
htmlstr:'<span style="color:red">文本内容</span>',
valuestr:'vue值'
}
}
})
</script>
</html>
运行结果如图所示:
4.表达式
Vue 提供了完全的JavaScript 表达式支持
{{str.substr(0,6).toUpperCase()}}
{{number + 1}} {{ok ? 'YES' : 'NO'}}
<li v-bind:id="'list' + id">我的id是js动态生成的</li>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 导入依赖 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title></title>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p>文本</p>
{{msg}}
<p>html页面转义</p>
<div v-html="htmlstr"></div>
<p>v-bind 属性绑定</p>
<input value="值" />
<input v-bind:value="valuestr" />
<input :value="valuestr" />
<p>vue 中可以对变量进行二次处理或可以使用js的语法</p>
{{str.substring(0,4)}}<br/>
{{num + 4}}<br>
{{ok ? '1' : '0'}}<br>
<!-- 通过:去绑定属性 -->
<span :id="idstr+'id'">书籍信息</span>
</div>
</body>
<script type="text/javascript">
// 创建实例
new Vue({
// 挂载实例
el:'#app',
// 变量区
data(){
return {
msg:'hello vue!!!',
htmlstr:'<span style="color:red">文本内容</span>',
valuestr:'vue值',
str:'hello world',
num:6,
ok:false,
idstr:'book_'
}
}
})
</script>
</html>
运行结果如图所示:
5. class 绑定
使用方式:v-bind:class="expression"
expression 的类型:字符串、数组、对象
第一个方式:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 导入依赖 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title></title>
<style type="text/css">
.a{
color: greenyellow;
}
</style>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p>class 绑定</p>
<span class="a">文本内容</span>
</div>
</body>
<script type="text/javascript">
// 创建实例
new Vue({
// 挂载实例
el:'#app',
// 变量区
data(){
return {
}
}
})
</script>
</html>
第二种方式:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 导入依赖 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title></title>
<style type="text/css">
.a{
color: greenyellow;
}
</style>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p>class 绑定</p>
<span :class="classStr">文本内容</span>
</div>
</body>
<script type="text/javascript">
// 创建实例
new Vue({
// 挂载实例
el:'#app',
// 变量区
data(){
return {
classStr:'a'
}
}
})
</script>
</html>
运行结果都是一样的:
6.style 绑定
v-bind:style="expression"
expression 的类型:字符串、数组、对象
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 导入依赖 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title></title>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p>style 绑定</p>
<span :style="styleStr">文本内容</span>
</div>
</body>
<script type="text/javascript">
// 创建实例
new Vue({
// 挂载实例
el:'#app',
// 变量区
data(){
return {
styleStr:'color:blue;'
}
}
})
</script>
</html>
运行结果如图所示:
二、指令
指令指的是带有 “v-” 前缀的特殊属性
核心指令
(v-if|v-else|v-else-if)/v-show/v-for/v-bind/v-on/v-model
v-if|v-else|v-else-if:根据其后表达式的bool值进行判断是否渲染该元素
他们只能是兄弟元素
v-else-if上一个兄弟元素必须是v-if
v-else上一个兄弟元素必须是v-if或者是v-else-if
v-show:与v-if类似,只是会渲染其身后表达式为false的元素,而且会给这样的元素添加css代码:style="display:none"
v-for:类似JS的遍历,
遍历数组: v-for="item in items", items是数组,item为数组中的数组元素
遍历对象: v-for="(value,key,index) in stu", value属性值,key属性名,index下标
v-bind :绑定属性
v-on :绑定事件
v-model:数据的双向绑定
v-model:用来在 input、select、textarea、checkbox、radio 等表单控件元素上创建双向数据绑定,根据表单上的值,自动更新绑定的元素的值
v-for/v-model一起绑定[多选]复选框和单选框
1.v-if/v-else/if/v-else
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 导入依赖 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title></title>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p>v-if</p>
<!-- 输入分数:60分一些为不及格,60-70分为合格,70-80为良,80-90为优秀,90-100为优+ -->
请输入分数:<input v-model="score" />
对应的结果:
<span v-if="score<60">不及格</span>
<span v-else-if="score<70">及格</span>
<span v-else-if="score<80">良</span>
<span v-else-if="score<90">优秀</span>
<span v-else-if="score<=100">优+</span>
<span v-else="">输入格式不正确</span>
</div>
</body>
<script type="text/javascript">
// 创建实例
new Vue({
// 挂载实例
el:'#app',
// 变量区
data(){
return{
score:0
}
}
})
</script>
</html>
运行结果如图所示: 输入什么就对应的什么
2. v-show 与 v-if 的区别
v-show是通过display=none去隐藏了这个标签,而v-if 连这个标签的没有了
代码演示:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!-- 导入依赖 --> <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script> <title></title> </head> <body> <!-- 定义边界 --> <div id="app"> <p>v-show</p> 请输入结果:<input v-model="showflag" /> <span v-show="showflag">show:展示与否</span> <span v-if="showflag">if:展示与否</span> </div> </body> <script type="text/javascript"> // 创建实例 new Vue({ // 挂载实例 el:'#app', // 变量区 data(){ return{ showflag:false } } }) </script> </html>
运行结果如图所示:
3. v-for
注意:下拉框是写在里面, 复选框是写在外面
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 导入依赖 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title></title>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p>v-for</p>
<select>
<option v-for="l in likes" :value="l.id">{{l.name}}</option>
</select>
<br />
<div v-for="l in likes">
<input type="checkbox" :value="l.id"/>{{l.name}}
</div>
</div>
</body>
<script type="text/javascript">
// 创建实例
new Vue({
// 挂载实例
el: '#app',
// 变量区
data() {
return {
likes: [{
id: 1,
name: '军旗'
},
{
id: 2,
name: '桌球'
},
{
id: 3,
name: '乒乓球'
},
{
id: 4,
name: '篮球'
}
]
}
}
})
</script>
</html>
运行结果如图所示:
4.v-model 是 数据的双向绑定
v-bind 是 绑定属性
v-on 是 绑定事件
Ctrl+k是格式化代码,重新对齐 上面整合的代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 导入依赖 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title></title>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p>v-if</p>
<!-- 输入分数:60分一些为不及格,60-70分为合格,70-80为良,80-90为优秀,90-100为优+ -->
请输入分数:<input v-model="score" />
对应的结果:
<span v-if="score<60">不及格</span>
<span v-else-if="score<70">及格</span>
<span v-else-if="score<80">良</span>
<span v-else-if="score<90">优秀</span>
<span v-else-if="score<=100">优+</span>
<span v-else="">输入格式不合法</span>
<p>v-show</p>
请输入结果:<input v-model="showflag" />
<span v-show="showflag">show:展示与否</span>
<span v-if="showflag">if:展示与否</span>
<p>v-for</p>
<select>
<option v-for="l in likes" :value="l.id">{{l.name}}</option>
</select>
<br />
<div v-for="l in likes">
<input type="checkbox" :value="l.id"/>{{l.name}}
</div>
</div>
</body>
<script type="text/javascript">
// 创建实例
new Vue({
// 挂载实例
el: '#app',
// 变量区
data() {
return {
score: 0,
showflag: false,
likes: [{
id: 1,
name: '军旗'
},
{
id: 2,
name: '桌球'
},
{
id: 3,
name: '乒乓球'
},
{
id: 4,
name: '篮球'
}
]
}
}
})
</script>
</html>
三、过滤器
一般会使用全局过滤器
Vue.filter('filterName', function (value) {
// value 表示要过滤的内容
});
局部过滤器
new Vue({
filters:{'filterName':function(value){}}
});
vue允许你自定义过滤器,被用作一些常见的文本格式化,格式如下:
<!-- 在两个大括号中 -->
{{ name | capitalize }}
<!-- 在 v-bind 指令中 -->
<div v-bind:id="rawId | formatId"></div>
注1:过滤器函数接受表达式的值作为第一个参数
注2:过滤器可以串联
{{ message | filterA | filterB }}
注3:过滤器是JavaScript函数,因此可以接受参数:
{{ message | filterA('arg1', arg2) }}
注4:js定义一个类
function Stu(){};
Stu.prototype.add(a,b){};//添加一个新的实例方法
Stu.update(a,b){};//添加一个新的类方法
过滤器:时间格式,翻译,多一个点0,时间的处理,数据的处理都可以通过过滤器来处理
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 导入依赖 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title></title>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<!-- 变量 -->
{{msg|strSplit}}
</div>
</body>
<script type="text/javascript">
// 前端的打断点
// debugger;
// strSplit:过滤器的名字
Vue.filter('strSplit',function(value){
// value:处理的变量
console.log(value);
return value;
})
// 创建实例
new Vue({
// 挂载实例
el:'#app',
// 变量区
data(){
return{
msg:'hello vue!!!'
}
}
})
</script>
</html>
运行结果如图所示:
运行的结果如图所示:
过滤器的串联
过滤器的传参
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 导入依赖 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title></title>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<!-- 变量 -->
<!-- {{msg|strSplit}} -->
<!-- 过滤器的串联 -->
{{msg|strSplit|strSplit2}}
<!-- 过滤器的传参 -->
{{msg|strSplit3(2,5)}}
{{msg|strSplit3(1,4)}}
</div>
</body>
<script type="text/javascript">
// strSplit:过滤器的名字
Vue.filter('strSplit',function(value){
// 前端的打断点
// debugger;
// value:处理的变量
console.log(value);
return value.substring(0,5);
})
Vue.filter('strSplit2',function(value){
// value:处理的变量
console.log(value);
return value.substring(3,5);
})
Vue.filter('strSplit3',function(value,a,b){
// value:处理的变量
console.log(value);
return value.substring(a,b);
})
// 创建实例
new Vue({
// 挂载实例
el:'#app',
// 变量区
data(){
return{
msg:'hello vue!!!'
}
}
})
</script>
</html>
运行结果如图所示:
四、计算属性与监听属性
这些写就会拼接起来
如图所示:
1.计算属性
监听属性:是你输入的两个值直接影响到这个结果 单方面的影响
代码块:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 导入依赖 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title></title>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p>计算属性</p>
请输入第一个数<input v-model="x" /><br>
请输入第二个数<input v-model="y" /><br>
结果为:{{addFlag}}
</div>
</body>
<script type="text/javascript">
// 创建实例
new Vue({
// 挂载实例
el:'#app',
// 变量区
data(){
return {
x:0,
y:0
}
},computed:{
// 计算属性
addFlag:function(){
return parseInt(this.x) + parseInt(this.y)
}
}
})
</script>
</html>
运行结果如图所示:
2.监听属性
监听属性:是相互之间印象
代码块:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 导入依赖 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title></title>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p>计算属性</p>
请输入第一个数<input v-model="x" /><br>
请输入第二个数<input v-model="y" /><br>
结果为:{{addFlag}}
<p>监听属性</p>
请输入千米:<input v-model="km" /><br>
请输入米:<input v-model="m" /><br>
</div>
</body>
<script type="text/javascript">
// 创建实例
new Vue({
// 挂载实例
el: '#app',
// 变量区
data() {
return {
x: 0,
y: 0,
km:0,
m:0
}
},
computed: {
// 计算属性
addFlag: function() {
return parseInt(this.x) + parseInt(this.y)
}
},
watch:{
km:function(v){
// :之前对应的是被监听的属性,v指的是被监听属性的值
// 当v对应的值发生变化的时候,会执行这个方法
// v代表的是千米
this.m = parseInt(v)*1000;
},
m:function(v){
this.km = parseInt(v)/1000;
}
}
})
</script>
</html>
运行结果如图所示:
五、购物车案例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 导入依赖 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title></title>
</head>
<body>
<div id="app">
<p>购物车</p>
<table>
<tr>
<td>物品</td>
<td>单价</td>
<td>数量</td>
<td>小计</td>
</tr>
<tr>
<td>帽子</td>
<td>{{maoziDanJia}}</td>
<td>
<input v-model="maoziShuLiang" />
</td>
<td>{{maoziXiaoJi}}</td>
</tr>
<tr>
<td>衣服</td>
<td>{{yifuDanJia}}</td>
<td>
<input v-model="yifuShuLiang" />
</td>
<td>{{yifuXiaoJi}}</td>
</tr>
<tr>
<td>裤子</td>
<td>{{kuziDanJia}}</td>
<td>
<input v-model="kuziShuLiang" />
</td>
<td>{{kuziXiaoJi}}</td>
</tr>
<tr>
<td>总价</td>
<td colspan="2"></td>
<td>{{zojia}}</td>
</tr>
</table>
</div>
</body>
<script type="text/javascript">
new Vue({
el:'#app',
data(){
return{
maoziShuLiang:1,
yifuShuLiang:1,
kuziShuLiang:1,
maoziDanJia:20,
yifuDanJia:3000,
kuziDanJia:700
}
},
computed:{
// 因为数量 会影响小计,小计不会影响数量,所以使用计算属性
maoziXiaoJi:function(){
return parseInt(this.maoziDanJia) * parseInt(this.maoziShuLiang);
},
yifuXiaoJi:function(){
return parseInt(this.yifuDanJia) * parseInt(this.yifuShuLiang);
},
kuziXiaoJi:function(){
return parseInt(this.kuziDanJia) * parseInt(this.kuziShuLiang);
},
zojia:function(){
return parseInt(this.maoziXiaoJi + this.yifuXiaoJi + this.kuziXiaoJi);
}
}
})
</script>
</html>
运行结果如图所示:
六、总结
1.插值
{{文本}}
v-html
v-bind 绑定属性
2.指令
v-if/v-else-if/v-else
v-show & v-if 的区别
v-show是通过display=none去隐藏了这个标签,而v-if 连这个标签的没有了
v-for
3.过滤器
定义:Vue.filter('filterName',function(value){})
串联过滤器
过滤器传参
4.计算属性与监听属性
计算属性是 一方依赖于另一方
监听属性是 相互依赖,相互影响