VUE专题 组件中的重要组成(选项) data+methods+watch+computed

data

data:Vue实例的数据对象。
在Vue页面中,子组件可能会对此实例化和调用,所以为了确保子组件数据的独立性和隔离性,组要使用data(){return{}}的方法,每次返回一个新的对象。

export default {
  name:'my-vuePage',
  data(){
	 return {
       initNum: 0,
       userName: '',
       myMap: {
		key1: '',
		key2: ''
	   },
	   initFloat: 0.0

	 }
  }

}

props

在子组件的模板内不能直接引用父组件的数据。
父组件的数据需要通过 prop 才能下发到子组件中.也就是说props是子组件访问父组件数据的唯一接口。
父组件通过v-bind向子组件传值,子组件通过props来获取父组件传递过来的值,被引用的就是子组件
在这里插入图片描述

methods

在Vue中,methods被命名为方法,它也是让我们调用在对象上下文中的函数,它可以操作对象中包含的数据。
函数必须在Vue中的methods属性下添加。

下面的省略号是忽略不写的其他代码,不是语法!!!!

<template>
.......
<button @click="myMethods1()">
<button @click="myMethods2(31)">
.......
</teplate>
<script>
......
methods:{
   myMethods1:function(){
		alert("I am methods1")
   },
   
   myMethods2:function(num){
		alert("I am methods"+num)
   },
	
}
......
</script>

watch(监听)

在vue中,使用watch来响应数据的变化。watch的用法大致有三种。

1.直接写一个监听处理函数,当每次监听到 cityName 值发生改变时,执行函数。
例如:
同样是写在script中,与methods同级
其中使用v-model使用到的参数需要先在data中申明一下,例如上面写的例子,data与methods也是同级关系,写在script中

<template>
.......
<input type="text" v-model="Uname">
.......
</teplate>
<script>
......
watch:{
   Uname(newValue, oldValue){
		alert(newValue)
		alert(oldValue)
   }
	
}
......
</script>

2.Immediate和handler。
当值第一次绑定的时候,不会执行监听函数,只有值发生改变才会执行。如果需要在最初绑定值的时候也执行函数,则就需要用到immediate属性。
比如当父组件向子组件动态传值时,子组件props首次获取到父组件传来的默认值时,也需要执行函数,此时就需要将immediate设为true。

watch:{
   Uname(newValue, oldValue){
		alert(newValue)
		alert(oldValue)
   },
   immediate: true
	
}

immediate表示在watch中首次绑定的时候,是否执行handler,值为true则表示在watch中声明的时候,就立即执行handler方法,值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler。

3.deep。
当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,只有data中的数据才能够监听到变化,此时就需要deep属性对对象进行深度监听。

<template>
.......
<input type="text" v-model="person.name">
.......
</teplate>
<script>
.......
data(){
  return{
	person:{
      name:'',
      age:'',
      sex:''
	}
  }
}
......
watch:{
   person:{
		handler(newValue, oldValue){
		  alert(newValue)
		  alert(oldValue)
   		},
   		deep:true,
   		immediate:true
	}
	
}
......
</script>
watch:{
   'person.name':{
		handler(newValue, oldValue){
		  alert(newValue)
		  alert(oldValue)
   		},
   		deep:true,
   		immediate:true
	}
	
}

设置deep: true 则可以监听到cityName.name的变化,此时会给cityName的所有属性都加上这个监听器,当对象属性较多时,每个属性值的变化都会执行handler。如果只需要监听对象中的一个属性值,可以使用字符串的形式监听对象属性,这样只会给对象的某个特定的属性加监听器。

数组(一维、多维)的变化不需要通过深度监听,对象数组中对象的属性变化则需要deep深度监听。

computed

computed:计算属性。
计算属性可用于快速计算视图( View )中显示的属性。这些计算将被缓存,并且只在需要时更新。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对于复杂逻辑,应当使用计算属性

computed与methods的区别

可以将同一函数定义为一个方法而不是一个计算属性。
两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的响应式依赖进行缓存的。
只在相关响应式依赖发生改变时它们才会重新求值。
这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。
相比之下,每当触发重新渲染时,调用方法将总会再次执行函数。

在这里插入图片描述


版权声明:本文为weixin_44131922原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。