<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="../js/vue-2.6.9.min.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div class="demo">
<h1>{{name}}</h1>
<button @click="changeName">change</button>
</div>
</body>
<script type="text/javascript">
var demo = new Vue({
el:'.demo',
data:{
name:"蜡笔小新"
},
methods:{
changeName:function(){
this.name = "阿呆"
this.$nextTick(function(){
//打印出阿呆
console.log(document.getElementsByTagName('h1')[0].innerHTML)
})
//document.getElementsByTagName('h1')[0].innerHTML
//直接打印是异步处理,仍然打印出蜡笔小新
}
}
})
</script>
</html>
$nextTick
是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用 $nextTick
,则可以在回调中获取更新后的 DOM。<script type="text/javascript">
/* 同步事件的优先级大于异步事件 */
console.log(1)/* 同步事件 */
setTimeout(function(){/* 异步事件 */
console.log(2)
},1000)
console.log(3)/* 同步事件 */
</script>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="../js/vue-2.6.9.min.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div class="demo">
<h1>{{name}}---{{priceComputed}}</h1>
</div>
</body>
<script type="text/javascript">
var demo = new Vue({
el: '.demo',
data: {
name: "vivo",
price: 3000
},
computed:{
priceComputed:function(){
return "¥" + this.price
}
}
})
</script>
</html>
Vue.filter过滤器具体代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="../js/vue-2.6.9.min.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div class="demo">
<h1>{{name}}---{{price | filterMoney |$filterMoney}}</h1>
</div>
</body>
<script type="text/javascript">
/* 注意Vue.filter的过滤器重名的时候,优先用局部 */
/* 全局注册 */
Vue.filter('filterMoney',function(value){
/* value值指的是price */
return '¥'+value
})
/* 构造器 */
var demo = new Vue({
el: '.demo',
data: {
name: "vivo",
price: 3000
},
/* 局部注册 */
filters:{
$filterMoney:function(value){
return value+"特价"
}
}
})
</script>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="../js/vue-2.6.9.min.js" type="text/javascript" charset="utf-8"></script>
<style type="text/css">
.no{
color:green;
}
.yes{
color: red;
}
</style>
</head>
<body>
<div class="demo">
<ul>
<li v-for="Person of Persons" v-bind:class="Person | filterColor">
{{Person.name}}--{{Person | filterPerson}}
</li>
</ul>
</div>
</body>
<script type="text/javascript">
/* 全局注册过滤器 */
Vue.filter('filterPerson',function(value){
/* value值指的是Person */
return value.type == 0?'未关注':'已关注'
})
Vue.filter('filterColor',function(value){
return value.type == 0?'no':'yes'
})
/* 构造器 */
var demo = new Vue({
el: '.demo',
data:{
/* 非0即真,0代表没关注,1代表关注 */
Persons:[
{type:1,name:'杨幂'},
{type:0,name:'邓超'},
{type:1,name:'李易峰'},
{type:0,name:'鹿晗'}
]
}
})
</script>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="../js/vue-2.6.9.min.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div class="demo">
<p>{{name}}</p>
<!-- filters在局部注册了过滤器 -->
<!--{{price | filterRound | filterMoney}}对数量没有限制 -->
<p>{{price | filterRound | filterMoney}}</p>
</div>
</body>
<script type="text/javascript">
/* 构造器 */
var demo = new Vue({
el: '.demo',
data:{
name:'哈士奇',
price:200.6
},
/* 局部注册过滤器 */
filters:{
filterRound:function(value){
/* 四舍五入price的价钱 */
return Math.round(value)
},
filterMoney:function(value){
return "¥" + value +'元'
}
}
})
</script>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="../js/vue-2.6.9.min.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div class="demo">
<h2>
日期:{{time | filterTime(year,month,day)}}
</h2>
</div>
</body>
<script type="text/javascript">
/* 构造器 */
var demo = new Vue({
el: '.demo',
data:{
time:'今天:',
year:2019,
month:11,
day:9
},
/* 局部注册过滤器 */
filters:{
filterTime:function(value,option1,option2,option3){
return value + option1 + '-' + option2 + '-' + option3
}
}
})
</script>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="../js/vue-2.6.9.min.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div class="demo">
<h2>
<!-- option1和option2、option3分别作为参数传给filterTime过滤器 -->
日期:{{year,month,day |filterTime}}
</h2>
</div>
</body>
<script type="text/javascript">
/* 构造器 */
var demo = new Vue({
el: '.demo',
data:{
year:2019,
month:11,
day:9
},
/* 局部注册过滤器 */
filters:{
/* option1和option2、option3分别作为参数传给filterTime过滤器 */
filterTime:function(option1,option2,option3){
return option1 + '-' + option2 + '-' + option3
}
}
})
</script>
</html>
1、注册—①全局Vue.filter;②局部filters选项
2、调用—①文本插值表达式方式;②v-bind表达式中使用
3、串联—过滤器串联/过滤器的参数写法/管道式连接过滤
①{{message | filterA | filterB}}
②{{message | filterA(option1,option2,…,optionN)}}
③{{ option1 , option2 , … ,optionN | filterA }}
4、优先级—当全局过滤器和局部过滤器重名时,会优先采用局部过滤器
5、过滤器VS计算属性
①computed不能传参,会缓存数据
②fliter过滤器可以传参,不会缓存