vue2监听对象和vue3监听对象数组
时间: 2024-10-18 18:24:08 浏览: 58
在 Vue.js 中,监听数据变化有两方面的区别,一个是 Vue 2 版本,另一个是 Vue 3 版本。
**Vue 2:**
Vue 2 使用 `vm.$watch` 或者 `v-on` 指令来监听对象或数组的变化。例如,对于对象:
```javascript
let obj = { prop: 'initial' };
var vm = new Vue({
data: {
myObj: obj
},
watch: {
'myObj.prop': function(newVal, oldVal) {
console.log('Prop changed:', newVal);
}
}
});
```
这里通过 `watch` 对象属性的键路径进行监听。
对于数组:
```javascript
let arr = ['item1', 'item2'];
vm.$watch('myArr', (newVal, oldVal) => {
console.log('Array changed:', newVal);
}, { deep: true }); // 如果需要深度监听,传入 `{ deep: true }`
```
`$watch` 需要传入监听的目标以及回调函数。
**Vue 3:**
Vue 3 引入了响应式系统,通过 `ref`、` reactive` 等创建的数据会自动跟踪变化。监听对象可以这样做:
```javascript
import { ref } from 'vue';
const obj = ref({ prop: 'initial' });
// 直接访问值变化就会触发更新
obj.value.prop = 'new value';
// 或者使用 computed 和 watch
const myObj = obj.value;
watch(myObj, (val) => {
console.log('Prop changed:', val);
});
```
对于数组,同样推荐使用 `reactive`:
```javascript
const arr = reactive(['item1', 'item2']);
arr.push('item3'); // 自动跟踪变化
```
`watch` 可以直接作用于数组或响应式的对象上,不需要设置 `deep` 参数。
阅读全文