08计算属性

<template>
  <div>
    <h1>计算属性</h1>
  </div>
  <h5>插值语法实现</h5>
  <hr/>
  <div id="root">
    姓: <input type="text"
              v-model="firstName"
    >
    <br/><br/>
    名: <input type="text"
              v-model="lastName"
    >
    <br/><br/>
    <!-- 第0位第1位,第二2,不包含第3位 -->
    姓名:<span>{{firstName.slice(0,3).toUpperCase()}}-{{lastName}}</span>
  </div>
  <hr/>
  <h5>methods实现</h5><hr/>
  <div id="root">
    姓: <input type="text"
              v-model="firstName"
    >
    <br/><br/>
    名: <input type="text"
              v-model="lastName"
    >
    <br/><br/>
    <!-- 第0位第1位,第二2,不包含第3位 -->
    姓名:
    <span>
      <!-- 不加()是把函数展示在上面function () { [native code] } -->
      {{fullName()}}
      <!-- <button v-on:click="fullName()">点我</button> -->
    </span>
  </div>
  <hr/>
  <h5>计算属性实现</h5><hr/>
  <div id="root">
    姓: <input type="text"
              v-model="firstName"
    >
    <br/><br/>
    名: <input type="text"
              v-model="lastName"
    >
    <br/><br/>
    测试: <input type="text" v-model="x">
    <br/><br/>
    姓名:
    <span>
      {{fullName1}}
    </span>
    <br/><br/>
    姓名:
    <span>
      {{fullName1}}
    </span>
    <br/><br/>
    姓名:
    <span>
      {{fullName1}}
    </span>
  </div>
  Property(属性)  or   method(方法) 就是data里面写的东西都是属性
  <hr/>
  <h5>watch监视属性</h5><hr/>
  <div id="root">
    姓: <input type="text"
              v-model="firstName"
    >
    <br/><br/>
    名: <input type="text"
              v-model="lastName"
    >
    <br/><br/>
    姓名:
    <span>
      {{fullName2}}
    </span>
    <br/><br/>
  </div>
    <br/><br/>

计算属性:<hr/>
    1.定义:要用的属性不存在,要通过已有的属性计算得来。(不能是随便的一个变量比如脱离了vm的管理)<hr/>
    2.原理:底层借助了Objcet.defineproperty方法提供的getter和setter。<hr/>
    3.get函数什么时候执行?<hr/>
          (1).初次读取时会执行一次<hr/>
          (2).当依赖的数据发生改变时会被再次调用<hr/>
    4.优势:与methods实现相比,内部有缓存机制(复用),效率更高,调用方便。<hr/>
    5.备注:<hr/>
            1.计算属性最终会出现在vm上,直接读取使用即可。<hr/>
            2.如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生改变<hr/>
    <h3>
      computer 和 watch之间的区别<hr/>
        1.computed能完成的功能, watch都可以完成。<hr/>
        2.watch能完成的功能, computed不一定能完成, 例如: watch可以进行异步操作。<hr/>
      两个重要的小原则<hr/>
        1.所被Vue所管理的函数,最好写成普通函数,这样this的指向才是vm 或 组件实例对象。<hr/>
        2.所有不被Vue所管理的函数,(定时器的回调函数,ajax的回调函数,Promise的回调函数成功失败等)最好写成箭头函数。<hr/>
        这样this的指向才是vm 或 组件实例对象。<hr/>
    </h3>
</template>
<script>
// import  01_初始Vue  from './components.';
export default {
//data的第二种写法:函数式
  data() { 
    // console.log('@@@',this);
    return { 
      firstName:'张',
      lastName:'三',
      x:'你好',
      fullName2:'',
    
    }
  },
  methods:{
    fullName () {
      console.log('@--fullName'); // 上来就会调用, 只要改动就会重新调用(只要data中的数据改动,就会重新解析模板)
      return this.firstName + '--' + this.lastName
    }
    
  },
  computed: {
    fullName1: {
      // get有什么作用? 当有人读取fullName时,get就会被调用, 且返回值就作为fullName1的值
      // get什么时候调用? 1.初次读取fullName时。2.所依赖的数据发生变化时。
      get () {
        console.log('get被调用了')
        // console.log(this) //此处的this是vm
        return this.firstName + '---' + this.lastName
      },
      // set什么时候调用, 当fullName1被修改的时候。
      set (value) {
        console.log(value)
        const arr = value.split('-')
        this.firstName = arr[0]
        this.lastName = arr[1]
      }

    },
    //简写 当get用   (只考虑读取,不考虑修改的时候才能用简写的方式。)
    // fullName:function () {
    //   console.log('get被调用了')
    //   return this.firstName + '---' + this.lastName
    // }
  },
  watch: {
    firstName (newValue,oldValue) {
      console.log(newValue,oldValue)
      // this.fullName2 = newValue  + '----' + this.lastName
     setTimeout(() => {
      this.fullName2 = newValue  + '----' + this.lastName
     }, 1000);
    },
    lastName(newValue){
      this.fullName2 = this.firstName + '----' + newValue
    }
  }

  
}
</script>
<style scoped>
</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值