Vue-计算属性
计算属性
案例
输入姓、名, 全名称=姓+名
实现
插值语法
- 代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>计算属性与监视</title><!-- 引入Vue --><script type="text/javascript" src="../js/vue.js"></script></head><body><div id="root"><h1>计算属性与监视</h1><div>姓:<input type="text" v-model="firstName" /><br />名:<input type="text" v-model="lastName" /><br /><!-- 插值语法 -->全名称:<span>{{firstName}}{{lastName}}</span><br> </div></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示new Vue({el: "#root",data: {firstName: "刘",lastName: "德华",}});</script>
</html>
- 效果
方法
- 代码
{{ fullName() }}: 方法 必须携带括号
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>计算属性与监视</title><!-- 引入Vue --><script type="text/javascript" src="../js/vue.js"></script></head><body><div id="root"><h1>计算属性与监视</h1><div>姓:<input type="text" v-model="firstName" /><br />名:<input type="text" v-model="lastName" /><br /><!-- 插值语法 --><!-- 全名称:<span>{{firstName}}{{lastName}}</span><br> --><!-- 方法 : 必须携带括号 -->全名称:<span>{{ fullName() }}</span><br />全名称:<span>{{ fullName() }}</span><br /></div></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示new Vue({el: "#root",data: {firstName: "刘",lastName: "德华",},methods: {fullName() {console.log("调用fullname方法了")return this.firstName + this.lastName;},},});</script>
</html>
- 效果
发现多次调用,fullName 方法也被调用了多次
计算属性
- 代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>计算属性与监视</title><!-- 引入Vue --><script type="text/javascript" src="../js/vue.js"></script></head><body><div id="root"><h1>计算属性与监视</h1><div>姓:<input type="text" v-model="firstName" /><br />名:<input type="text" v-model="lastName" /><br /><!-- 插值语法 --><!-- 全名称:<span>{{firstName}}{{lastName}}</span><br> --><!-- 方法 : 必须携带括号 --><!-- 全名称:<span>{{ fullName() }}</span><br /> --><!-- 全名称:<span>{{ fullName() }}</span><br /> --><!-- 计算属性 -->全名称:<span>{{ computedFullName }}</span><br />全名称:<span>{{ computedFullName }}</span><br /></div></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示new Vue({el: "#root",data: {firstName: "刘",lastName: "德华",},computed: {computedFullName: {get() {console.log("调用computedFullName get 了");return this.firstName + "-" + this.lastName;},set(value) {console.log("调用computedFullName set 了");const names = value.split("-")this.firstName = names[0]this.lastName = names[1]},},// 简写 : 适用于只进行计算 不做修改的场景 // computedFullName() {// console.log("调用computedFullName了");// return this.firstName + this.lastName;// },},methods: {fullName() {console.log("调用fullname方法了");return this.firstName + this.lastName;},},});</script>
</html>
- 效果
发现多次调用,computedFullName 只调用了一次
总结
属性计算有多种方式实现 插值
、方法
、计算属性
。
- 插值: 适用于简单的拼接之类的。
- 方法:适用于复杂的运算封装称方法供使用
- 花括号中调用方法必须携带括号。如:
{{fullName()}}
- 多次调用,均会触发方法进行对应的逻辑执行
- 花括号中调用方法必须携带括号。如:
- 计算属性:vue提供专用于属性计算的配置块
- 本质是对象的get、set实现的,最终绑定到vm
- 因此调用时
只需要计算属性名称,不能携带括号
- 多次调用,只会触发一次计算逻辑,缓存机制
首次调用
、依赖项变更
会触发计算逻辑即缓存更新