美文网首页
vue核心方法

vue核心方法

作者: 马儿爱吃草 | 来源:发表于2019-05-29 11:40 被阅读0次

    props

    说明:子组件 访问 父组件数据的唯一接口

    computed

    说明:计算数据
    示例:

    new Vue({
      el: '#root',
      template: `
        <div>
          <span>Name: {{firstName + ' ' + lastName}}</span>
          <span>Name: {{name}}</span>
          <span>Name: {{getName()}}</span>
        </div>
      `,
      data: {
        firstName: 'Jokcy',
        lastName: 'Lou'
      },
      computed: {
        name () { // 使用 computed
          return `${this.firstName} ${this.lastName}`
        }
      },
      methods: {
        getName () { // 使用 methods
          return `${this.firstName} ${this.lastName}`
        }
      }
    })
    
    

    好处
    computed 里面声明的数据发生改变时,该声明的数据才会重新计算,并进行缓存;
    当改变其他数据时,computed 属性并不会重新计算,从而提升性能。

    watch

    说明:监听数据,并根据该数据改变得到的新值,进行某些操作。

    new Vue({
      template: `
        <div>
          <p>FullName: {{fullName}}</p>
          <p>FirsName: <input type="text" v-model="firstName"/></p>
        </div>
      `,
      data: {
        firstName: 'Jokcy',
        lastName: 'Lou',
        fullName: ' '
      },
      watch: {
        firstName (newName, oldName) {
          this.fullName = newName + ' ' + this.lastName
        }
      }
    })
    
    

    watch 的方法默认是不会执行的,只有当监听数据变化,才会执行

    watch 的 immerdiate 属性

    说明:通过声明 immediate 选项为 true,可以立即执行一次 handler。

    watch: {
        firstName: {
          handler (newName, oldName) {
            this.fullName = newName + ' ' + this.lastName
          },
          immediate: true
        }
      }
    
    watch 的 deep 属性

    说明:默认情况下,handler 只监听属性引用的变化,也就是只监听了一层,但改对象内部的属性是监听不到的

    new Vue({
      template: `
        <div>
          <p>Obj.a: <input type="text" v-model="obj.a"/></p>
        </div>
      `,
      data: {
        obj: {
          a: '123'
        }
      },
      watch: {
        obj: {
          handler () {
            console.log('obj.a changed')
          },
          immediate: true
          // deep: true
        }
      }
    })
    
    

    通过使用 deep: true 进行深入观察,这时,我们监听 obj,会把 obj 下面的属性层层遍历,都加上监听事件,这样做,性能开销也会变大,只要修改 obj 中任意属性值,都会触发 handler。

    deep 优化

    在字符串中,写 obj 深入的属性调用,vue 会层层解析,找到 a,并进行监听。

    watch: {
        'obj.a': {
          handler () {
            console.log('obj.a changed')
          },
          immediate: true
          // deep: true
        }
      }
    

    来源声明
    Vue核心知识-computed和watch的使用场景和方法

    相关文章

      网友评论

          本文标题:vue核心方法

          本文链接:https://www.haomeiwen.com/subject/jouetctx.html