一、业务场景:前两个文本框中输入值,最后一个文本框自动监听前面输入的值
方式一:使用事件绑定机制@keyup,在methods中写入监听方法
<body> <div id="app"> firstName:<input type="text" v-model="firstname" @keyup="getFullName">+ lastName<input type="text" v-model="lastname" @keyup="getFullName2">= <input type="text" v-model="fullname" > <p>{{fullname}}</p> </div> <script> var vm = new Vue({ el: '#app', data: { firstname: '', lastname: '', fullname: '' }, methods: { getFullName(){ this.fullname = this.firstname + this.lastname }, getFullName2(){ this.fullname = this.firstname + this.lastname } } }) </script> </body>
方法二:使用watch监听文本变化
使用watch属性 可以监视data中指定数据的变化 然后触发这个watch中对应的处理方法
<body> <div id="app"> <input type="text" v-model="firstname" >+ <input type="text" v-model="lastname" >= <input type="text" v-model="fullname" > </div> <script> var vm = new Vue({ el: '#app', data: { firstname: '', lastname: '', fullname: '' }, methods: {}, watch: { //使用这个属性 可以监视data中指定数据的变化 然后触发这个watch中对应的处理方法 //firstname可加 可不加引号 但如果是first-name 必须要加引号 firstname: function(newVal, oldVal){ console.log('监视变化') this.fullname = newVal + '-' + this.lastname }, lastname: function (newVal) { this.fullname = this.firstname + '-' + newVal } } }) </script> </body>
方法三:使用computed计算文本值
在computed中可以定义一些属性 这些属性叫【计算属性】 计算属性的本质就是一个方法,只不过在使用这些计算属性的时候 就把他们的名称当做属性来使用
注意:
- 计算属性(方法)在引用时一定不要加() 直接把它当做普通属性去使用就好了
- 只要计算属性这个function内部所用到的任何data中的数据发生了变化 就会重新计算这个计算属性的值
- 计算属性的求职结果会被保存起来 方便下次直接使用 如果计算属性方法中所依赖的任何数据都没有发生变化 则不会重新对计算属性 求职 这个可以提高运行效率
- 计算属性中必须有return
<body> <div id="app"> <input type="text" v-model="firstname" >+ <input type="text" v-model="lastname" >= <input type="text" v-model="fullname" > <p>{{fullname}}</p> </div> <script> var vm = new Vue({ el: '#app', data: { firstname: '', lastname: '' }, methods: {}, computed: { fullname: function () { console.log('计算fullname被调用次数') return this.firstname + '-' + this.lastname } } }) </script> </body>
二、三种方法之间的比较
- computed属性会被缓存 除非依赖的响应式属性变化才会重新被计算 主要当做属性来使用
- methods方法表示一个具体的操作 主要书写业务逻辑
- watch一个对象 键是需要观察的表达式 值是对应的回调函数 主要用来监听某些特定数据的变化 从而进行某些具体的业务逻辑操作 可以看做是computed和methods的结合体