好家伙,
补了一下watch的多种用法
1.属性: 方法(最常用)
使用最广泛的方式是将watch
选项设置为一个对象,对象的属性是要观测的数据属性,值是一个回调函数,该回调函数会在属性变化时触发。例如:
watch: { firstName: function(newVal, oldVal) { console.log('firstName changed:', newVal, oldVal); } }
2.属性: 数组
你可以在一个watch
选项中观测多个数据属性,这可以通过将要观测的属性放入一个数组中来实现。例如:
watch: { 'person.firstName': function(newVal, oldVal) { console.log('firstName changed:', newVal, oldVal); }, 'person.lastName': function(newVal, oldVal) { console.log('lastName changed:', newVal, oldVal); } }
3.属性: 对象
另一种观测多个属性的方式是使用对象。在这种情况下,对象的键是要观测的属性,值是一个包含处理函数、handler的对象。
该处理函数与属性值的回调函数相同,用于在属性更改时执行组件中的逻辑。它还可以包含其他选项,例如deep
和immediate
。例如:
watch: { person: { handler: function(newVal, oldVal) { console.log('person changed:', newVal, oldVal); }, deep: true } }
4.属性:字符串
还可以使用字符串指定要观察的属性,然后使用对应的方法名称作为回调函数。这个选项在只有一个属性需要观察的情况下非常有用。例如:
watch: { 'person.firstName': 'firstNameChanged' }, methods: { firstNameChanged: function(newVal, oldVal) { console.log('firstName changed:', newVal, oldVal); } }
5.带命名空间的watch
watch
选项中可以使用字符串表示要观测的属性,可以使用.
来访问对象中的属性,如'person.firstName'
,但是这样会导致处理函数与属性名称紧密耦合,不便于维护。
为了解决这个问题,Vue提供了一种带命名空间的watch用法,这可以通过在watch
选项中使用对象来实现。
对象的每个键都代表一个观测的命名空间,值是观测该命名空间下属性的处理函数。例如:
watch: { person: { firstName: function(newVal, oldVal) { console.log('firstName changed:', newVal, oldVal); }, lastName: function(newVal, oldVal) { console.log('lastName changed:', newVal, oldVal); } } }
这里,我们可以为person
对象指定两个命名空间—firstName
和lastName
,这些命名空间被视为person
层次结构的子命名空间。
6.$watch
除了在组件选项中设置watch
属性之外,Vue还允许你使用实例方法$watch
来实现相同的效果。
与组件选项中设置的watch
选项不同,调用$watch
时可以在任何地方使用,例如在计算属性、方法或任何其他实例方法中。例如:
created() { this.$watch('person.firstName', function(newVal, oldVal) { console.log('firstName changed:', newVal, oldVal); }) }
7.深度观测
在默认情况下,watch
只会观测对象的第一层属性的变化。这意味着在对象的嵌套层次结构中更改属性时,不会触发处理函数。要观测对象的深层属性,可以在watch
选项中使用deep
属性,如下所示:
watch: { 'person.name': { handler: function(newVal, oldVal) { console.log('name changed:', newVal, oldVal); }, deep: true } }
在这个例子中,我们观察person
对象的name
属性,使用deep: true
选项在对象深层次结构中更改属性时仍然能够触发处理函数。
综上所述,Vue的watch
选项提供了多种方法来观测数据属性的变化,让我们能够编写更加优雅和维护性更高的代码。
标签:多种,Vue,firstName,person,watch,newVal,oldVal,属性 From: https://www.cnblogs.com/FatTiger4399/p/17788007.html