vue 当中的属性方法watch、computed和methods

主要类说一下:watch、computed和methods三个属性之间的对比

首先我们来创建一下案例结构:

<body>
  <div id="app">
      <input type="text" v-model="firstname">+
      <input type="text" v-model="lastname">=
      <input type="text" v-model="fullname">
  </div>
  <script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
          firstname: '',
          lastname: '',
          fullname: ''
      },

      create(){},

      methods: {},
    });
  </script>

1.watch监听数据变化

watch和methods平级,使用这个 属性,可以监视 data 中指定数据的变化,然后触发这个 watch 中对应的 function 处理函数
该方法可以不用绑定事件,而methods当中 一般写的是触发函数,不再页面触发的函数写在与methods并列即可;

当然vue有和小程序onload一样页面初次进来就加载的函数,是create所以要是页面初次进来有需要赋值的data用来页面的填充可以使用这个函数,或者在这个函数当中去调用methods当中的韩式也是可以的;

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>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
          firstname: '',
          lastname: '',
          fullname: ''
      },
      methods: {},
      watch: {
          'firstname': function(newVal){
              this.fullname = newVal + '-' + this.lastname
          },
          'lastname': function(newVal){
              this.fullname = this.firstname + '-' + newVal
          }
      }

//注意:watch函数有两个变量,只是在该函数中有一个没有用上,写上也没有关系
//比如firstname可以写成这样
 //'firstname': function(newVal,oldVal){
 //             this.fullname = newVal + '-' + this.lastname
 //         },

    });
  </script>
</body>



//当然watch也可以监听路由的变化,写法如下:


<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="./lib/vue-2.4.0.js"></script>
  <script src="./lib/vue-router-3.0.1.js"></script>
</head>

<body>
  <div id="app">
    <router-link to="/login">登录</router-link>
    <router-link to="/register">注册</router-link>
    <router-view></router-view>

  </div>

  <script>
    var login = {
      template: '<h3>这是登录子组件,这个组件是 奔波霸 开发的。</h3>'
    }

    var register = {
      template: '<h3>这是注册子组件,这个组件是 霸波奔 开发的。</h3>'
    }

    var router = new VueRouter({
      routes: [ // 路由规则数组
        { path: '/', redirect: '/login' },
        { path: '/login', component: login },
        { path: '/register', component: register }
      ],
      linkActiveClass: 'myactive' // 和激活相关的类
    })

    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {},
      // router: router
      router,
       watch: {
          //监听路由的变化
          '$route.path': function(newVal,oldVal){
              if(newVal === '/login'){
                  console.log('欢迎进入login')
              }else if(newVal === '/register'){
                console.log('欢迎进入register')
              }
          }
      }
    });
  </script>
</body>

</html>

 1.computed计算属性的使用

computed和methods平级

在 computed 中,可以定义一些 属性,这些属性,叫做 【计算属性】, 计算属性的本质,就是 一个方法,只不过我们在使用 这些计算属性的时候,是把它们的名称直接当作属性来使用的;并不会把 计算属性当作方法去调用;

computed与data的区别

计算属性(computed,也是用来存储数据用的,但是和data属性相比还是有区别

区别就是,计算属性必须是一个由返回值的方法

但调用的方法是一样的:比如下面:

 

computed与methods的区别

    1 计算属性是基于它所依赖的数据进行更新,在有在相关依赖的数据发生变化了才会进行更新,而普通的方法每次都会执行

    2 计算属性是有缓存的,只要它所依赖的数据没有发生改变,后面的每一次访问计算属性中的值,都是之前缓存的结果,不会重复执行,而普通的方法每次都会执行。

 

需要注意的两单就是:

计算属性,在引用的时候,一定不要加 () 去调用,直接把它当作普通 属性去使用就好了;

只要 计算属性,这个 function 内部,所用到的 任何 data 中的数据发送了变化,就会立即重新计算 这个 计算属性的值

比如说,我们之前创建的实例:

<body>
  <div id="app">
      <input type="text" v-model="firstname">+
      <input type="text" v-model="lastname">=
      <input type="text" v-model="fullname">
  </div>


  <script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
          firstname: '',
          lastname: '',
      },
      methods: {},
      watch: {},
      computed: {
          'fullname': function(){
              return this.firstname + '-' + this.lastname
          }
      }
    });
  </script>
</body>

//1.fullname没有在data中定义
//2.在compute定义fullname后直接return出去就好
///计算属性的求值结果,会被缓存起来,方便下次直接使用; 如果 计算属性方法中,所有的任何数据,
//都没有发生过变化,则不会重新对计算属性求值;

//也就是说上面firstname 或者lastname只有有一个属性发生了变化都会去重新计算fullname的值
//要是都没有发生变化 则不会重新计算

下面简单总结下:

  • computed属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。主要当作属性来使用;
  • methods方法表示一个具体的操作,主要书写业务逻辑;
  • watch一个对象,键是需要观察的表达式,值是对应回调函数。主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作;可以看作是computedmethods的结合体;

简单的说就是:

vue 中computed 和methods 在使用效果来看可以说是一样的,但是深入看还是不一样的。

区别就在于: computed 依赖缓存, methods 却不是。

怎么理解呢?

当Dom每次需要渲染computed的值,这个值已经处于缓存之中,不需要再重复的经历一遍计算过程,只有当computed依赖的数据变量发生变化,这个计算属性会自动更新,不需要渲染触发。

methods 的值被获取的时候就会每次都会重新经历一遍计算过程。


所以由此可以看出,computed和methods 的应用场景 和 计算过程的复杂程度有关, 如果计算过程复杂庞杂,而且计算属性会被经常调用(getter),那么最好使用缓存;如果,需要的值,计算简单,调用不频繁,实时性比较高(存在异步请求),会比较适合methods
computed有缓存,若相关数据未发生变化,则不调用; 
methods无缓存,需要事件才能调用它(如点击等),绑定在页面或者其他; 
watch多用于数据交互频繁的内容。(例如定时axios从服务器获取数据)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当使用Vue.js时,`computed`,`watch`和`methods`都是非常有用的功能。 `computed`属性是一种计算属性,可以根据其依赖关系动态地计算属性值。当它所依赖的属性发生变化时,它会自动重新计算属性值。这使得计算属性非常适合处理动态数据,例如将一组数据进行过滤、排序或计数。 示例代码: ```javascript computed: { // 计算属性,基于 count 和 factor 计算 total total: function () { return this.count * this.factor; } } ``` `watch`属性是一种观察属性,它可以监视Vue实例中的属性,并在其发生变化时执行指定的函数。这使得它非常适合处理异步数据,例如通过Ajax请求获取数据。 示例代码: ```javascript watch: { // 监视 message 属性的变化,并在变化时执行 showMessage 函数 message: function (newVal, oldVal) { this.showMessage(newVal); } } ``` `methods`属性是一个方法集合,它包含了Vue实例中可用的所有方法。当你需要执行某些特定的操作时,你可以调用其中一个方法。 示例代码: ```javascript methods: { // 定义一个 greet 方法 greet: function () { alert('Hello!'); } } ``` 总的来说,`computed`和`watch`适合处理不同类型的数据,而`methods`则是执行特定操作的最佳选择。 ### 回答2: Vue.js是一款MVVM模式的渐进式JavaScript框架。其中的computedwatchmethodsVue.js中非常重要的3个元素,它们分别用于计算、监听数据和存放方法。 1. Computed computed属性可以定义一个计算属性,类似于Vue.js中的响应式变量,可以根据依赖数据的变化自动计算得出新的值。computed属性可以使用get和set方法来实现对计算属性读取和写入操作,在模板中该属性会被当做一个正常的属性来处理。 computed适用于需要计算或派生新的值的场景,因为是缓存的,所以可以提升效率。如果依赖的数据没有发生改变,那么计算属性不会重新运行。通常computed适用于重复调用一个函数,但结果又不想重复计算的情况。 2. Watch watch属性Vue.js中用于监听数据变化的方法。它可以监听任何位于data属性中的数据变化,当数据变化时,watch会立即执行指定的回调函数。watch可以监听单个变量,也可以监听一个对象或数组,当一个数据集合发生变化时,回调函数只会执行一次,这样可以防止多重操作的影响。 watch适用于需要执行异步操作或需要监听数据变化的场合。watchcomputed运行开销要大,因为它需要在数据发生变化时立刻运行回调函数,这样可能会导致性能问题。通常watch适用于数据变化需要执行比较复杂的操作情况。 3. Methods methods属性Vue.js中存放方法的地方。它们可以在模板中通过v-on指令来进行调用。与computed不同的是,methods属性中的方法不会自动计算,也不会缓存。每次需要调用方法时,都需要重新运行方法methods适用于需要执行一些常规操作、事件的处理、绑定指令等任务。当需要在模板中执行复杂操作或有一些逻辑判断时,也可以使用methods。因为methods需要每次都重新计算运行,因此,如果该方法在模板中被多次调用,可能会导致性能问题。 综上所述,computedwatchmethodsVue.js中各有所长,选择何种方法取决于具体的需求和场景。使用computed可以提升性能,使用watch适用于需要异步处理或监听数据变化的场景,使用methods则适合处理一些常规操作和事件绑定。 ### 回答3: 在 Vue 中,computedwatchmethods 都是非常重要的工具,它们都有自己独特的用途和作用。 Computed Computed 是一种计算属性,基于已有的数据生成新的数据并自动更新,通常用于数据计算,并将结果返回给模板使用。 Computed 应该是纯函数,依赖于数据响应式系统,只有当依赖的数据发生改变时,computed 才会重新计算。 在代码实现中,computed 的实现方法类似于一个函数,可以使用 get 和 set 语法,也可以简写。 Watch Watch 是数据监听的一种方法,用于监听数据变化并作出相应的操作,可以监听一个或多个属性,当被监听的属性发生变化时,就会触发所声明的函数。 在声明 watch 时,需要指定其监听的数据和回调函数,监听的数据可以是简单类型也可以是复杂类型,当监听的数据属性值发生变化时,watch 回调函数就会被调用,可以在回调函数中进行相应的操作。 Methods MethodsVue 实例上定义的方法,可以在模板中调用它们完成特定的功能。与 computed 不同的是,methods 方法可以接受参数,通过 this 调用实例上的数据,它们是可变的而 computed 不可变。 方法的代码实现类似于一个函数,可以接受参数,可以调用实例上的数据、方法和其他组件等,并在模板中通过方法来执行相应的操作。 在实际开发过程中,要灵活选择computedwatchmethods进行数据处理和绑定,根据不同的需求来进行选择使用,以达到高效运行和最佳性能的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值