一文快速上手Vue之计算属性和侦听器,过滤器

举报
yd_249383650 发表于 2023/03/23 11:11:57 2023/03/23
【摘要】 ​计算属性和侦听器1、计算属性(computed)某些结果是基于之前数据实时计算出来的,我们可以利用计算属性。来完成示例:<div id="app"><ul><li>西游记:价格{{xyjPrice}},数量:<input type="number" v-model="xyjNum"></li><li>水浒传:价格{{shzPrice}},数量:<input type="number" v-...

计算属性和侦听器

1、计算属性(computed)

某些结果是基于之前数据实时计算出来的,我们可以利用计算属性。来完成

示例:

<div id="app">
<ul>
<li>西游记:价格{{xyjPrice}},数量:

<input type="number" v-model="xyjNum"></li>
<li>水浒传:价格{{shzPrice}},数量:

<input type="number" v-model="shzNum"></li>
<li>总价:{{totalPrice}}</li>
</ul>
</div>
<script src="../node_modules/vue/dist/vue.js"></script>
<script type="text/javascript">

let app = new Vue({

el: "#app",

data: {

xyjPrice: 56.73,

shzPrice: 47.98,

xyjNum: 1,

shzNum: 1

},

computed: {

totalPrice(){

return this.xyjPrice*this.xyjNum + this.shzPrice*th
is.shzNum;
}
},
})

</script>

效果:只要依赖的属性发生变化,就会重新计算这个属性 

编辑

2、侦听(watch)  

watch 可以让我们监控一个值的变化。从而做出相应的反应。 示例:

<div id="app">
<ul>
<li>西游记:价格{{xyjPrice}},数量:

<input type="number" v-model="xyjNum"></li>
<li>水浒传:价格{{shzPrice}},数量:

<input type="number" v-model="shzNum"></li>
<li>总价:{{totalPrice}}</li>

{{msg}}

</ul>
</div>
<script src="../node_modules/vue/dist/vue.js"></script>
<script type="text/javascript">

let app = new Vue({

el: "#app",

data: {

xyjPrice: 56.73,

shzPrice: 47.98,

xyjNum: 1,

shzNum: 1,

msg:""

},

computed: {

totalPrice(){

return this.xyjPrice*this.xyjNum + this.shzPrice*th
is.shzNum;
}
},

watch: {

xyjNum(newVal, oldVal){

if(newVal >= 3){

this.msg = "西游记没有更多库存了";

this.xyjNum = 3;
}else{

this.msg = "";
}
}
}
})

</script>

编辑

3、过滤器(filters) 

过滤器不改变真正的`data`,而只是改变渲染的结果,并返回过滤后的版本。在很多不同的 情况下,过滤器都是有用的,比如尽可能保持 API 响应的干净,并在前端处理数据的格式。

示例:展示用户列表性别显示男女

<body>
<div id="app">
<table>
<tr v-for="user in userList">
<td>{{user.id}}</td>
<td>{{user.name}}</td>

<!-- 使用代码块实现,有代码侵入 -->

<td>{{user.gender===1? "男":"女"}}</td>
</tr>
</table>
</div>
</body>
<script src="../node_modules/vue/dist/vue.js"></script>
<script>

let app = new Vue({

el: "#app",

data: {

userList: [
{ id: 1, name: 'jacky', gender: 1 },
{ id: 2, name: 'peter', gender: 0 }
]
}
});

</script>

1、局部过滤器 

注册在当前 vue 实例中,只有当前实例能用

let app = new Vue({

el: "#app",

data: {

userList: [
{ id: 1, name: 'jacky', gender: 1 },
{ id: 2, name: 'peter', gender: 0 }
]
},

// filters 定义局部过滤器,只可以在当前 vue 实例中使用

filters: {

genderFilter(gender) {

return gender === 1 ? '男~' : '女~'

}
}
});

2、全局过滤器  

// 在创建 Vue 实例之前全局定义过滤器:

Vue.filter('capitalize', function (value) {

return value.charAt(0).toUpperCase() + value.slice(1)
})

任何 vue 实例都可以使用: td>{{user.name | capitalize}}td>

过滤器常用来处理文本格式化的操作。过滤器可以用在两个地方:双花括号插值和 v-bind

表达式

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。