<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>
<!--
案例 -两个输入框一个span标签,当输入框输入值后,需要将两个框的值用 “ - ” 连接到一起展示到span中
·为什么要用这样的方法?用插值表达式可以达到这个效果,但是插值表达式里面不建议写太多逻辑,太长违反了vue的声明式的规范
·用vue的methods也可以完成,在里面定义方法,然后插值表达式用方法名(),即可拿到方法的返回值展示,但每次加载都会调用一次该方法,效率太低
vue中的计算属性,vue中的属性指的是data里面的数据,计算属性意思就是计算data里面的数据,对data数据做一些操作然后展示
1.定义:要用的属性不存在。要通过已经有的属性计算得来。
2.备注:计算属性最终会出现在vm上,直接读取使用即可(不要在插值表达式里面加小括号())。
如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生改变,才会触动get方法从而改变计算属性
-->
<div id = "app">
姓名<input type="text" v-model="name">
age<input type="text" value="" v-model="age">
<span>{{fun}}</span><!--插值表达式里面写计算属性里面定义的方法,展示的是get里面的返回值,这里不能加小括号() -->
</div>
<script>
var vm = new Vue({
el: "#app",
data :{
name: "张三",
age: "18"
},
computed:{//计算属性 传入配置对象
fun:{//定义方法,需要执行这个方法具体逻辑
get(){//写get方法,当容器里用到了上面的fun时,模板解析时就会执行这个get函数
//另外,这个get方法还有一个细节,如果多个地方用了fun,并不会多次调用这个get方法,因为vue有缓存,当多次用fun时,会去缓存读取,但当所依赖的数据发生变化时,也会再次调用
return this.name + "-" + this.age;//执行具体的逻辑,并返回,当模板解析到fun函数时,就会将返回值展示到页面上(this表示vm实例对象)
},
set(val){//与get相对应的还有set方法,当fun被修改使用时,就会执行set方法
let splice = val.split("-");//将修改的值根据字符裁切成数组
this.name = splice[0];//将裁切的第一个字符串赋值给vm实例对象的name属性
this.age = splice[1];//将裁切的第二个字符串赋值给vm实例对象的name属性
//这样操作就完成了整个系列的变化。
//当依赖的data属性发生变化时,会调用get方法,我们可以在get方法中编写逻辑代码,将自己需要计算的属性展示在页面中
//当fun被修改时,如vm.fun = “***” 它被执行时会调用set方法,我们可以在set方法中编写自己的逻辑
//比如上面代码,将修改时传入的参数切割并赋值给vm的data属性,并会引发页面用到这些属性的地方出发更新数据
}
}
}
})
</script>
</body>
</html>