Vue数据相关属性总结

vue中的数据相关属性不够简单,并且相同实现还能互相转化,有时也拿不许该用哪一种属性。接下来,本文将整理一下各类数据相关属性的使用场景及限制,供使用vue的初学者参考。javascript

首先,整理一下数据相关属性有:vue

  • datajava

  • v-model缓存

  • computedapp

  • props函数

  • watch this

data

data属性是vue中最简单的数据属性,表明这个vue实例的一项数据,其定义方式以下:设计

const app = new Vue({  
  data: {    
    message: '...',  
  }
})

其引用方式以下:双向绑定

app.message = '...'
// 或者在template中,如:绑定到title属性上
<div :title="message"></div> 

// 也可用{{}}在模板中实现数据绑定
<div>{{ message }}</div>

注意一下,Vue组件定义时,data必须是functioncode

const Component = Vue.extend({  
    data: function () {    
        return { a: 1 }  
    }
})

v-model

v-model能够在表单控件或组件上创建双向绑定关系,本质上是一项语法糖,与data属性配合使用。

实现双向绑定的定义方法以下:

// 定义方法,组件与表单控件相同
<input v-model="something">

这只是一个语法糖,本质上是绑定了input控件的value属性与input事件

// 表单控件中v-model的本质实现
<input :value="something" @input="something = $event.target.value">

而组件中的本质实现以下:

// 自定义组件中v-model的本质实现
<custom-input :value="something" @input="something = argunments[0]">

可见,v-model在自定义组件中的使用将会自动绑定上input事件,自定义组件在检测到value改变时,能够触发input事件:this.$emit('input', newValue) 将value的改变传递到父组件的something属性中。

computed

计算属性,用于在模板中绑定复杂的逻辑,当依赖的属性改变时该计算属性也随之改变。

定义方法:

const app = new Vue({  
  computed: {    
    reversedMessage() {      
      return ...    
    }  
  }
})

计算属性的特性“当依赖的属性改变时该计算属性也随之改变”,也能够由函数的方式来实现。函数方式实现的代码以下所示:

const app = new Vue({
  methods: {
    reversedMessage() {
      return ...
    }
  }
})
<div>{{ reversedMessage() }}</div>

两种方式结果虽相同,但计算属性是基于依赖缓存,只有在它的相关依赖发生改变时才会从新取值,而没必要每次都执行函数更新属性值。

计算属性的引用方法同data属性,可做为模板中数据绑定也可绑定为组件属性,此处再也不累述。

props

props用于父组件向子组件中传递数据,其在组件中定义与使用方法以下:

Vue.component('child', {
  props: ['myMessage'],
})
<child my-message="...">
<child :my-message="tempValue">

注意:props中驼峰命名法而在组件属性中是短横线命名法

watch

watch用于观察属性发送变化后,作额外处理。

与computed属性的差异在于做用对象不一样,watch观察变化的源头,而computed属性是变化的目标,固然,二者能够互相转换。二者如何取舍在于:变化的源与目标哪部分的属性更多,若是多个源属性变化影响一个目标属性则建议使用computed;相反,如一个源属性变化影响了多个目标属性,则建议采用watch。

如欲实现由first name和last name组合一块儿的full name,可由watch实现:

var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'Foo',
    lastName: 'Bar',
    fullName: 'Foo Bar'
  },
  watch: {
    firstName: function (val) {
      this.fullName = val + ' ' + this.lastName
    },
    lastName: function (val) {
      this.fullName = this.firstName + ' ' + val
    }
  }
})

而用computed属性实现,则更精简一些:

var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'Foo',
    lastName: 'Bar'
  },
  computed: {
    fullName: function () {
      return this.firstName + ' ' + this.lastName
    }
  }
})

总结

Vue中数据相关属性众多,确实让初学者一时不知该如何选择。经过本文,咱们能够知道每一个属性被设计出来的目的、使用场景,及特性甚至更深层的实现原理,如此即可应对大部分选择属性的情形。

相关文章
相关标签/搜索