Vue 计算属性(computed)

1.插值语法

<title>姓名案例_插值语法实现</title>
<script type="text/javascript" src="../js/vue.js"></script>

<div id="root">
  姓:<input type="text" v-model="firstName"> <br/>
  名:<input type="text" v-model="lastName"> <br/>
  全名:<span>{
    
    {
    
     firstName }}-{
    
    {
    
     lastName }}</span>
</div>

<script type="text/javascript">
  Vue.config.productionTip = false
  new Vue({
    
    
    el:'#root',
    data:{
    
    
      firstName:'张',
      lastName:'三'
    }
  })
</script>

2.method 实现

数据发生变化,模板就会被重新解析

<title>姓名案例_methods实现</title>
<script type="text/javascript" src="../js/vue.js"></script>

<div id="root">
  姓:<input type="text" v-model="firstName"><br/>
  名:<input type="text" v-model="lastName"><br/>
  全名:<span>{
    
    {
    
     fullName() }}</span>
</div>

<script type="text/javascript">
  Vue.config.productionTip = false
  new Vue({
    
    
    el: '#root',
    data: {
    
    
      firstName: '张',
      lastName: '三'
    },
    methods: {
    
    
      fullName() {
    
    
        return this.firstName + '-' + this.lastName
      }
    },
  })
</script>

3.computed 计算属性

1.定义: 要用的属性不存在,需要通过已有属性计算得来

2.原理:底层借助 Object.defineProperty() 方法体用的getter 和 setter。

3.get函数什么时候执行

​ a.初次读取时会执行一次

​ b.当依赖的数据发生改变时会被再次调用

4.优势: 与methods 实现相比,内部有缓存机制(复用),效率更高,调试方便

5.备注

​ a.计算属性最终会出现在 vm 上,直接读取使用即可

​ b.如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生改变

​ c.如果计算属性确定不考虑修改,可以使用计算属性的简写形式。

<title>姓名案例_计算属性实现</title>
<script type="text/javascript" src="../js/vue.js"></script>

<div id="root">
  姓:<input type="text" v-model="firstName"> <br/>
  名:<input type="text" v-model="lastName"> <br/>
  测试:<input type="text" v-model="x"> <br/>	// 这里修改 不会调 fullName的get方法
  全名:<span>{
    
    {
    
    fullName}}</span> <br/>
  <!-- 全名:<span>{
    
    {
    
    fullName}}</span> <br/> -->
  <!-- 全名:<span>{
    
    {
    
    fullName}}</span> <br/> -->
</div>

<script type="text/javascript">
  Vue.config.productionTip = false
  const vm = new Vue({
    
    
    el: '#root',
    data: {
    
    
      firstName:'张',
      lastName:'三',
      x:'你好'
    },
    computed: {
    
    
      //完整写法
      // fullName: {
    
    
      // 	get() {
    
    
      // 		console.log('get被调用了')
      // 		return this.firstName + '-' + this.lastName
      // 	},
      // 	set(value) {
    
    
      // 		console.log('set', value)
      // 		const arr = value.split('-')
      // 		this.firstName = arr[0]
      // 		this.lastName = arr[1]
      // 	}
      // }

      // 简写
      fullName() {
    
    
        console.log('get被调用了')
        return this.firstName + '-' + this.lastName
      }
    }
  })
</script>

猜你喜欢

转载自blog.csdn.net/fd2025/article/details/125308777