计算属性的简写
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>计算属性的简写</title>
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="box">
姓名:<input type="text" v-model="name"><br>
公司:<input type="text" v-model="company"><br>
<h2>{{email}}</h2>
<h2>{{email}}</h2>
<h2>{{email}}</h2>
</div>
<script>
/*
计算属性:
多处调用只会执行一次,用方法会执行多次,使用计算属性可以提高代码运行效率。
和methods相比最大的好处是计算属性有缓存
*/
Vue.config.productionTip = false;
const vm = new Vue({
el:'#box',
data:{
name:'',
company:''
},
computed:{
email:function(){
console.log("执行")
return this.name + "@" + this.company + ".com";
}
}
})
</script>
</body>
</html>
天气案例-监视属性
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>监视属性</title>
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="box">
<!-- 不推荐 -->
<!-- <h1>今天的天气是{{isHot ? '炎热' : '凉爽'}}</h1> -->
<!-- 计算属性实现 -->
<h1>今天的天气是{{weather}}</h1>
<button type="button" @click="change">切换天气</button>
<button type="button" @click="isHot = !isHot">切换天气简洁版</button>
</div>
<script>
Vue.config.productionTip = false;
const vm = new Vue({
el:'#box',
data:{
isHot:true
},
computed:{//计算属性
weather(){//属性名称
return this.isHot ? '炎热' : '凉爽';//返回值
}
},
methods:{
change(){
/* if(this.isHot){
this.isHot = false;
}else{
this.isHot = true;
} */
this.isHot = !this.isHot;
}
}
/* ,watch:{//监视属性
isHot:{//被监视的属性
handler(nv,ov){//nv 新值 ov 改之前的值
console.log("isHot被修改了");
console.log(nv,ov);
},
immediate:true//初始化就立即执行一次
}
} */
})
// 第二种监视属性打开方法
setTimeout(() =>{//5秒后开始监视
vm.$watch('isHot',{
handler(nv,ov){//nv 新值 ov 改之前的值
console.log("isHot被修改了");
console.log(nv,ov);
}
})
},5000);
</script>
</body>
</html>
深度监视
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>深度监视</title>
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="box">
<h1>{{number.a}}</h1>
<button type="button" @click="number.a++">number增加</button>
</div>
<script>
Vue.config.productionTip = false;
const vm = new Vue({
el:'#box',
data:{
number:{
a:1,
b:5
}
}
,watch:{//监视属性
/* 'number.a':{//被监视的属性
handler(nv,ov){//nv 新值 ov 改之前的值
console.log("number被修改了");
console.log(nv,ov);
}
}, */
number:{
deep:true,//深度监视的开启,监视多级属性中所有的属性发生变化
//缺点:只能获取属性值改变之后的值,获取不了改变之前的值
handler(nv,ov){//nv 新值 ov 改之前的值
console.log("number被修改了");
console.log(nv,ov);
}
}
}
})
</script>
</body>
</html>
样式绑定
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>样式绑定</title>
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<style type="text/css">
.ball{
width: 200px;
height: 200px;
background-color: aquamarine;
}
.ballRadius{
border-radius: 50%;
}
.ballAlign{/* 文本左右居中 */
text-align: center;
font-size: 35px;
}
.ballLine{/* 文本上下居中 */
line-height: 200px;
color: azure;
}
</style>
</head>
<body>
<div id="box">
<!-- 样式绑定第一种方式 :class 单个属性 -->
<div class="ball" :class="ballRadius">
{{ball}}
</div>
<!-- 样式绑定第二种方式 :class 数组-->
<div class="ball" :class="ballStyle">
{{ball}}
</div>
<!-- 样式绑定第三种方式 :class 对象 true 和 false 控制样式的加载和移除 -->
<div class="ball" :class="ballObj" @click="ballObj.ballRadius = !ballObj.ballRadius">
{{ball}}
</div>
<!-- 样式绑定第四种方式 :style -->
<div class="ball" :class="ballObj" :style="ballColor">
{{ball}}
</div>
</div>
<script>
Vue.config.productionTip = false;
const vm = new Vue({
el:'#box',
data:{
ball:'这是一个球',
ballRadius:'ball-radius',//单样式
ballStyle:['ballRadius','ballAlign','ballLine'],//多样式
ballObj:{
ballRadius:true,
ballAlign:true,
ballLine:true
},
ballColor:{
color: 'green',
'font-size': '20px'
}
}
})
</script>
</body>
</html>
条件渲染
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>条件渲染</title>
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="box">
<!-- v-show 做条件渲染 -->
<div v-show="false">第一个{{ball}}</div>
<div v-show="1===1">第二个{{ball}}</div>
<!-- v-if 做条件渲染 -->
<!-- v-if移除代码 v-show隐藏代码 -->
<div v-if="false">第三个{{ball}}</div>
<!-- 练习一 v-show 完成-->
<h1 v-show="number === 1">Angualr</h1>
<h1 v-show="number === 2">React</h1>
<h1 v-show="number === 3">Vue</h1>
<button type="button" @click="number++">切换</button>
<!-- 练习二 if 完成-->
<h1 v-if="number === 1">Angualr</h1>
<h1 v-else-if="number === 2">React</h1>
<h1 v-else-if="number === 3">Vue</h1>
<h1 v-else>都不会</h1>
<button type="button" @click="number++">切换</button>
<!--
注意:
变化频率大使用show频率小使用if if会不停在Dom中进行增删
-->
<!-- template 模板的意思,本身是不显示的,只会在渲染时起作用 -->
<!-- template 只能配合v-if使用 -->
<template v-if="number === 4">
<h1>Angualr</h1>
<h1>React</h1>
<h1>Vue</h1>
</template>
</div>
<script>
Vue.config.productionTip = false;
const vm = new Vue({
el:'#box',
data:{
ball:'球',
number:1
}
})
</script>
</body>
</html>
列表渲染
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>列表渲染</title>
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="box">
<ul>
<li v-for="u in userList">
id:{{u.id}} 姓名:{{u.name}} 年龄:{{u.age}}
</li>
</ul>
<!-- 显示序号 -->
<ul>
<li v-for="(u,index) in userList">
序号:{{index+1}} 姓名:{{u.name}} 年龄:{{u.age}}
</li>
</ul>
</div>
<script>
Vue.config.productionTip = false;
const vm = new Vue({
el:'#box',
data:{
userList:[
{id:'1001',name:'张三',age:18},
{id:'1002',name:'李四',age:28},
{id:'1003',name:'王五',age:38}
]
}
})
</script>
</body>
</html>
最后修改于 2021-09-18 09:38:37
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

