目录
一、插值
1.1文本{msg}
示例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<!-- vue的相关依赖 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
</head>
<body>
<!-- 定义边界 Es6的具体体现 -->
<div id="app">
<p>文本</p>
<h3>{{msg}}</h3>
<p>html串</p>
<div v-html="htmlstr">
</div>
</div>
</body>
<script type="text/javascript">
// 绑定边界
new Vue({
el: '#app',
data() {
return {
// ctrl+k格式化
msg: 'vue你大爷',
htmlstr: '<h3 style="color:red;">这是一个html片段</h3>'
};
}
})
</script>
</html>
展示结果:
2、 html串:关键字:v-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>1.文本</p>
<h3>{{msg}}</h3>
<p>2.html串</p>
<div v-html="htmlstr">
</div>
</div>
<script type="text/javascript">
//绑定边界
new Vue({
el: '#app',
data() {
return {
msg: 'vue初步使用',
htmlstr: '<h3 style="color:red">这是一个html片段</h3>'
}
}
})
</script>
</body>
</html>
运行结果:
3、Vue属性:关键字: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>1.文本</p>
<h3>{{msg}}</h3>
<hr/>
<p>2.html串</p>
<div v-html="htmlstr">
</div>
<hr />
<p>3.vue中的属性</p>
<!-- 所有原生态的属性,要利用vue的变量,都需要在对应的属性前加v-binc -->
<a v-bind:href="hrefstr">百度一下</a>
<input :value="valuestr"/>
<hr />
</div>
<script type="text/javascript">
//绑定边界
new Vue({
el: '#app',
data() {
return {
msg: 'vue初步使用',
htmlstr: '<h3 style="color:red">这是一个html片段</h3>',
hrefstr: 'http://www.baidu.com',
valuestr:'2223 ',
}
}
})
</script>
</body>
</html>
运行结果:
1、点击百度链接可以跳转到百度官网:
2、v-bind缩写版本:在data中定一个valuestr赋一些值,之后用一个文本框(里面写法:value="valuestr")
4、表达式:
4.1 vue中含有内置函数
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>1.文本</p>
<h3>{{msg}}</h3>
<hr />
<p>2.html串</p>
<div v-html="htmlstr">
</div>
<hr />
<p>3.属性</p>
<a v-bind:href="hrefstr">百度一下</a>
<input :value="valuestr"/>
<hr />
<p>4.表达式 Vue提供了完全的JavaScript表达式支持</p>
<p>4.1 vue中含有内置函数/p>
{{str.substring(0,4).toUpperCase()}}
</div>
<script type="text/javascript">
//绑定边界
new Vue({
el: '#app',
data() {
return {
msg: 'vue初步使用',
htmlstr: '<h3 style="color:red">这是一个html片段</h3>',
hrefstr: 'http://www.baidu.com',
valuestr:'2223 ',
str:'java是最牛语言',
})
</script>
</body>
</html>
运行结果:
4.2vue可以支持运算
代码:在data中定义一个数字,在边界中写好{{ number + 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>1.文本</p>
<h3>{{msg}}</h3>
<hr />
<p>2.html串</p>
<div v-html="htmlstr">
</div>
<hr />
<p>3.属性</p>
<a v-bind:href="hrefstr">百度一下</a>
<input :value="valuestr"/>
<hr />
<p>4.表达式 Vue提供了完全的JavaScript表达式支持</p>
<p>4.1 vue中含有内置函数/p>
{{str.substring(0,4).toUpperCase()}}
<p>4.2vue可以支持运算</p>
张三:{{number+1}}
</div>
<script type="text/javascript">
//绑定边界
new Vue({
el: '#app',
data() {
return {
msg: 'vue初步使用',
htmlstr: '<h3 style="color:red">这是一个html片段</h3>',
hrefstr: 'http://www.baidu.com',
valuestr:'2223 ',
str:'java是最牛语言',
number:59,
})
</script>
</body>
</html>
运行结果:
4.3vue支持三元运算
代码:在data中一个属性赋值为boolean类型,在边界中写好{{ ok ? 'YES' : 'NO' }}
<!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>1.文本</p>
<h3>{{msg}}</h3>
<hr />
<p>2.html串</p>
<div v-html="htmlstr">
</div>
<hr />
<p>3.属性</p>
<a v-bind:href="hrefstr">百度一下</a>
<input :value="valuestr"/>
<hr />
<p>4.表达式 Vue提供了完全的JavaScript表达式支持</p>
<p>4.1 vue中含有内置函数/p>
{{str.substring(0,4).toUpperCase()}}
<p>4.2vue可以支持运算</p>
张三:{{number+1}}
<p>4.3vue支持三元运算</p>
{{ok ? 'yes':'no'}}
</div>
<script type="text/javascript">
//绑定边界
new Vue({
el: '#app',
data() {
return {
msg: 'vue初步使用',
htmlstr: '<h3 style="color:red">这是一个html片段</h3>',
hrefstr: 'http://www.baidu.com',
valuestr:'2223 ',
str:'java是最牛语言',
number:59,
ok:true,
})
</script>
</body>
</html>
运行结果:
4.4vue支持字符串拼接:
代码:在data中定义一个id并赋值,在边界中写好<span :id="'id_'+id">
<!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>1.文本</p>
<h3>{{msg}}</h3>
<hr />
<p>2.html串</p>
<div v-html="htmlstr">
</div>
<hr />
<p>3.属性</p>
<a v-bind:href="hrefstr">百度一下</a>
<input :value="valuestr"/>
<hr />
<p>4.表达式 Vue提供了完全的JavaScript表达式支持</p>
<p>4.1 vue中含有内置函数/p>
{{str.substring(0,4).toUpperCase()}}
<p>4.2vue可以支持运算</p>
张三:{{number+1}}
<p>4.3vue支持三元运算</p>
{{ok ? 'yes':'no'}}
<p>4.4vue支持字符串拼接</p>
<span :id="'id_'+id">
</span>
</div>
<script type="text/javascript">
//绑定边界
new Vue({
el: '#app',
data() {
return {
msg: 'vue初步使用',
htmlstr: '<h3 style="color:red">这是一个html片段</h3>',
hrefstr: 'http://www.baidu.com',
valuestr:'2223 ',
str:'java是最牛语言',
number:59,
ok:true,
id:19
}
}
})
</script>
</body>
</html>
运行结果:
二、指令
指的是带有“v-”前缀的特殊属性
1、v-if|v-else|v-else-if(分支语法):
代码:在data中定义一个成绩,超过80分为优秀,超过60分为良好,60分之下就为差。
定义一个input绑定score数据(v-model):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p> v-if|v-else|v-else-if</p>
分数:<input v-model="score" />
<div v-if="score>80">优秀</div>
<div v-else-if="score>60">良好</div>
<div v-else="score<60">继续加油</div>
</div>
</body>
<script type="text/javascript">
<!-- 绑定边界 -->
new Vue({
el:'#app',
data() {
return {
score:66
};
}
})
</script>
</html>
运行结果(根据用户在输入框中输入的数字判断成绩优良差:):
2、v-show:定义一个输入框,同样条件是score>90,当输入框的成绩大于90就显示出"上优秀就业榜单"小于90就是不显示
<p>2.v-show</p
<p>2.1v-show与v-if的区别</p>
<div v-show="score>90">v-show-上优秀学员名单</div>
<div v-if="score>90">v-if-上优秀学员名单</div>
运行结果:
成绩大于90时:
成绩小于90时:将不会显示"上优秀就业榜单"
上述图示 还可以阐释v-if与v-show的区别:
v-if连div代码都不存在了 ,v-show只是display隐藏掉了
v-show:与v-if类似,只是会渲染其身后表达式为false的元素,而且会给这样的元素添加css代 码:style="display:none"
3、v-for:类似JS的遍历
遍历数组: v-for="item in items", items是数组,item为数组中的数组元素
遍历对象: v-for="(value,key,index) in stu", value属性值,key属性名,index下标
下拉框:hobbySelected被选中的选项——回显,以及可以根据后面的输入框填入的进行下拉框选中
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p>v-for</p>
<select v-model="hobbySelected">
<option v-for="h in hobby" :value="h.id">{{h.name}}</option>
</select>
<input v-model="hobbySelected" />
</div>
</body>
<script type="text/javascript">
<!-- 绑定边界 -->
new Vue({
el:'#app',
data() {
return {
hobby:[
{id:"1",name:"洗头"},
{id:"2",name:"洗浴"},
{id:"3",name:"洗脚"}
],
hobbySelected:3
};
}
})
</script>
</html>
运行结果入下:
4、v-for复选框:
代码:
<p>3.v-for复选框</p>
<div v-for="h in hobby">
<input v-bind:value="h.id" type=checkbox >{{h.name}}
</div>
运行如下:
5、v-on(缩写@click="handle")
代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p>4.v-on</p>
<button type="button" v-on:click="handle">触发事件</button>
<p>4.v-on (缩写@click="handle") </p>
<button type="button" @click="handle">触发事件222</button>
</div>
</body>
<script type="text/javascript">
<!-- 绑定边界 -->
new Vue({
el:'#app',
data() {
return {
score:78,
hobby:[
{id:"1",name:"洗头"},
{id:"2",name:"洗浴"},
{id:"3",name:"洗脚"}
],
hobbySelected:3
};
},
methods:{
handle(){
alert("触发事件");
}
}
})
</script>
</html>
运行如下:
三、动态参数
1、定义:动态参数是指可以在v-on:[定义一个属性],然后在data里面进行传值就可以实现动态参数(动态参数表达式有一些语法约束,evName无效,evname有效,回避大写)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p>3.动态参数</p>
<button v-on:[evname]="handle">动态参数</button>
</div>
</body>
<script type="text/javascript">
<!-- 绑定边界 -->
new Vue({
el:'#app',
data() {
return {
// evname:'click'
evname:'dblclick'
};
},
methods:{
handle(){
alert("触发事件");
}
}
})
</script>
</html>
运行结果:这里是点击了两下,才触发事件,因为evname为delclick。
四、过滤器
简介:过滤分为局部过滤和全局过滤,这个概念就好比全局变量和局部变量。
1.全局过滤器
Vue.filter('filterName', function (value) {
// value 表示要过滤的内容
});
2、局部过滤器
new Vue({
filters:{'filterName':function(value){}}
});
3、串联
4、过滤器可以传参的
代码:(注意这里的value是指要被过滤的文字,取头不取尾)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
{{msg|all}},{{msg|single}},{{msg|all|single}},{{msg|param(4,5)}}
</div>
</body>
<script type="text/javascript">
//全局过滤器
Vue.filter('all', function (value) {
return value.substring(2,6);
});
<!-- 绑定边界 -->
new Vue({
el:'#app',
data() {
return {
msg:"java最牛"
};
},
// 局部过滤
filters:{
'single':function(val){
return val.substring(2,3);
},
'param':function(val,start,end){
return val.substring(start,end);
}
}
})
</script>
</html>
五、计算属性&监听属性
1、属性分为计算属性和监听属性,其中计算属性可用于快速计算视图(View)中显示的属性。这些计算将被缓存,并且只在需要时更新,关键词:computed:{}而监听属性可以通过 watch 来响应数据的变化,关键词: watch:{}
2、计算属性:
我将会用一个购物车实例来讲解计算属性:在边界中要创建一个表格,在data里面要定义好各个物品的数量,里面的数据是动态数据,就是说一个数据会随着另一个数据的改变而改变
代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
<p>计算属性</p>
<table border="1" style="width: 600px;height: 300px;">
<tr>
<td>帽子</td>
<td>30</td>
<td>
<input v-model="maozi" />
</td>
<td>
{{maoziTotal}}
</td>
</tr>
<tr>
<td>鞋子</td>
<td>28</td>
<td>
<input v-model="xiezi" />
</td>
<td>
{{xieziTotal}}
</td>
</tr>
<tr>
<td>裤子</td>
<td>12</td>
<td>
<input v-model="kuzi" />
</td>
<td>
{{kuziTotal}}
</td>
</tr>
<tr>
<td>总价</td>
<td colspan="3">{{total}}</td>
</tr>
</table>
<p>监听属性</p>
千米:<input v-model="km" />
米:<input v-model="m" />
</div>
</body>
<script type="text/javascript">
<!-- 绑定边界 -->
new Vue({
el:'#app',
data() {
return {
maozi:1,
xiezi:1,
kuzi:1,
km:2,
m:2000
};
},
methods:{
handle(){
alert("触发事件");
}
},
// 计算属性
computed:{
maoziTotal(){
return this.maozi*30;
},
xieziTotal(){
return this.xiezi*28;
},
kuziTotal(){
return this.kuzi*12;
},
total(){
return this.maoziTotal+this.xieziTotal+this.kuziTotal;
}
},
// 监听属性
watch:{
// v指的是m变量
m(v){
this.km=parseInt(v)/1000
},
// v指的是km变量
km(v){
this.m=parseInt(v)*1000
}
}
})
</script>
</html>
运行如下:
3、监听属性:
用km和m的换算来讲解这个知识点:
<p>监听属性</p>
千米:<input v-model="km" />
米:<input v-model="m"/>
<script type="text/javascript">
watch:{
new Vue({
km:function(v){
this.m=parseInt(v)*1000;
},
m:function(v){
this.km=parseInt(v)/1000;
}
}
})
})
</script>
注意:km:function(v){
this.m=parseInt(v)*1000;
},该代码的意思是v为参数,catch用来监听km,之后将km的值除以1000赋值给m,m函数也是一样的
运行结果:
4、监听属性和计算属性的区别:
1、计算属性没有在变量中使用,但是在vue边界中使用
<input v-model="maozi" />
2、监听属性在变量中定义中,而且监听属性的变量是相互影响的
km:function(v){
this.m=parseInt(v)*1000;
},
m:function(v){
this.km=parseInt(v)/1000;
}
本期内容结束~