Vue计算属性和监听属性

一、计算属性

  计算属性关键词: computed。计算属性在处理一些复杂逻辑时是很有用的。

  可以看下以下反转字符串的例子:

<div id="app">
  {{ message.split(‘‘).reverse().join(‘‘) }}
</div>
//模板变的很复杂起来,也不容易看懂理解

  使用了计算属性的实例:

<div id="app">
  <p>原始字符串: {{ message }}</p>
  <p>计算后反转字符串: {{ reversedMessage }}</p>
</div>

<script>
var vm = new Vue({
  el: ‘#app‘,
  data: {
    message: ‘Runoob!‘
  },
  computed: {
    // 计算属性的 getter
    reversedMessage: function () {
      // `this` 指向 vm 实例
      return this.message.split(‘‘).reverse().join(‘‘)
    }
  }
})
</script>

  实例中声明了一个计算属性 reversedMessage 。提供的函数将用作属性 vm.reversedMessage 的 getter 。vm.reversedMessage 依赖于 vm.message,在 vm.message 发生改变时,vm.reversedMessage 也会更新。

1、computed vs methods

  我们可以使用 methods 来替代 computed,效果上两个都是一样的,但是 computed 是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值。而使用 methods ,在重新渲染的时候,函数总会重新调用执行。

methods: {
  reversedMessage2: function () {
    return this.message.split(‘‘).reverse().join(‘‘)
  }
}

{{reversedMessage2()}}

  可以说使用 computed 性能会更好,但是如果你不希望缓存,你可以使用 methods 属性。

  此外,computed 对象内的方法如果在初始化时绑定到元素上的事件会先执行一次这个方法 ,而 methods 内的方法则不会。

2、computed setter

  computed 属性默认只有 getter ,不过在需要时你也可以提供一个 setter :

<div id="app">
  <p>{{ site }}</p>
</div>

<script>
var vm = new Vue({
  el: ‘#app‘,
  data: {
    name: ‘Google‘,
    url: ‘http://www.google.com‘
  },
  computed: {
    site: {
      // getter
      get: function () {
        return this.name + ‘ ‘ + this.url
      },
      // setter
      set: function (newValue) {
        var names = newValue.split(‘ ‘)
        this.name = names[0]
        this.url = names[names.length - 1]
      }
    }
  }
})
// 调用 setter, vm.name 和 vm.url 也会被对应更新
vm.site = ‘测试计算属性 setter‘;
document.write(‘name: ‘ + vm.name);
document.write(‘<br>‘);
document.write(‘url: ‘ + vm.url);
</script>

  结果显示的就不是默认的name和url值,而不是 vm.site 的 setter 的值。

  setter 会被调用, vm.name 和 vm.url 也会被对应更新。

二、监听属性

  监听属性 watch,我们可以通过 watch 来响应数据的变化。

<div id = "computed_props">
    千米 : <input type = "text" v-model = "kilometers">
    米 : <input type = "text" v-model = "meters">
</div>
<p id="info"></p>
<script type = "text/javascript">
    var vm = new Vue({
    el: ‘#computed_props‘,
    data: {
        kilometers : 0,
        meters:0
    },
    methods: {
    },
    computed :{
    },
    watch : {
        kilometers:function(val) {
            this.kilometers = val;
            this.meters = val * 1000;
        },
        meters : function (val) {
            this.kilometers = val/ 1000;
            this.meters = val;
        }
    }
    });
    // $watch 是一个实例方法
    vm.$watch(‘kilometers‘, function (newValue, oldValue) {
    // 这个回调将在 vm.kilometers 改变后调用
    document.getElementById ("info").innerHTML = "修改前值为: " + oldValue + ",修改后值为: " + newValue;
})
</script>

  以上代码中我们创建了两个输入框,data 属性中, kilometers 和 meters 初始值都为 0。

  watch 对象创建了两个方法 kilometers 和 meters。

  当我们再输入框输入数据时,watch 会实时监听数据变化并改变自身的值。

原文地址:https://www.cnblogs.com/goloving/p/8516870.html

时间: 2024-12-07 14:30:53

Vue计算属性和监听属性的相关文章

表单、条件、循环指令,分隔符,前端数据库,过滤器,计算属性,监听属性,冒泡排序

目录 一. 表单指令 1. v-model = "变量" (1)普通input框 (2)单选input框 (3)单一复选input框 (4)多复选input框 2. 实例 二.条件指令 1. v-show="布尔变量" 2. v-if="布尔变量" 3. v-if v-else-if v-else 4. 实例 三.循环指令 1. v-for="变量 in 可迭代对象" (1)遍历字符串或数组 (2)遍历对象(字典) 2. 实例

属性观察者(监听属性的变化)

// 属性观察者, 用于监听属性变化, 在属性变化的时候调用 class Person { var name: String = "" { // 也可以写成willSet{}, 系统默认会传入一个名为newValue的参数 willSet(newValue) { print("name这个属性将被修改了, \(newValue)") } // 也可以写成didSet{} didSet(newValue) { print("name这个属性已经被修改了, \

09.VUE学习之watch监听属性变化实现类百度搜索栏功能ajax异步请求数据

cmd下安装axios npm install axios 安装好后,会多出node_modules文件夹 思路: 监听data里的word改变时,发送ajax异步请求数据, 把返回的数据赋值给data里的result,再传给模板里 9.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible&qu

Vue (表单、斗篷、条件、循环指令,分隔符成员、计算属性成员、属性的监听、vue组件、子组件)

表单指令 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>表单指令</title> </head> <body> <div id="app"> <form action=""> <!--属性指令:v-model=

实例成员:计算属性 监听属性以及vue的项目开发

6)字符串补充 双引号: "前缀" + 变量 + "后缀" 单引号: '前缀' + 变量 + '后缀' 反引号: `前缀$(变量)后缀` ps:在反引号中可以用$()来包裹变量,实现字符串的拼接 7)实例成员:计算属性 监听属性 计算属性: ? 1)计算属性其实就是vue中的方法属性,方法名可以作为属性来使用,属性值就是方法的返回值 ? 2) 在computed中声明的方法属性,不能在data中重复声明,比data中声明的属性要多出些逻辑的的地方 ? 3)方法属性自

vue2.0之监听属性的使用心得及搭配计算属性的使用

我们在工作中常常需要监听某一个属性值的变化,这个时候我们就需要用到了监听属性watch,在这里我总结watch属性的三种场景使用希望对你有所帮助: 1.基础版监听: 场景如下:输入框输入你的年龄,如果年龄在0-15岁提示信息:你还是个小孩,如果年龄在 15-25岁,提示信息:你已经是个少年,如果年龄在25岁以上,提示信息:你已经长大了.根据需求配合监听属性我们得到下面的代码: <template> <div id="app"> 年齡:<input type

VUE 计算属性 vs 侦听属性

计算属性 vs 侦听属性 Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性.当你有一些数据需要随着其它数据变动而变动时,你很容易滥用 watch——特别是如果你之前使用过 AngularJS.然而,通常更好的做法是使用计算属性而不是命令式的 watch 回调.细想一下这个例子: <div id="demo">{{ fullName }}</div> var vm = new Vue({ el: '#demo', data: { fi

9.Vue.js 监听属性

本章节,我们将为大家介绍 Vue.js 监听属性 watch,我们可以通过 watch 来响应数据的变化. 以下实例通过使用 watch 实现计数器: <div id = "app"> <p style = "font-size:25px;">计数器: {{ counter }}</p> <button @click = "counter++" style = "font-size:25px;&

vue监听属性完成首字母大小写转换

监听属性 watch 侦听属性的作用是侦听某属性值的变化,从而做相应的操作,侦听属性是一个对象,它的键是要监听的对象或者变量,值一般是函数,当你侦听的元素发生变化时,需要执行的函数,这个函数有两个形参,第一个是当前值,第二个是变化后的值. 代码实现: 效果图: 原文地址:https://www.cnblogs.com/onerose/p/10099031.html