vue2中watch监听不到的情况有哪些
时间: 2023-10-28 14:40:12 浏览: 48
一些情况下,由于Vue的响应式系统限制,watch无法监听到某些数据的变化,例如:
1. 对象属性的新增和删除
2. 数组的某些变化,如splice和数组长度变化
3. 嵌套对象和数组的变化,需要使用deep选项进行深度监听
4. 对象属性值的变化,如果只是修改属性值但是没有重新赋值给对象,watch无法监听到。
相关问题
vue2 watch监听sessionstorage 监听不到
根据提供的代码,可能是因为watch监听的是sessionStorage对象本身,而不是sessionStorage中某个具体的key值。因此,当sessionStorage中的某个key值发生变化时,watch监听不到。解决方法是在sessionStorage中的某个key值发生变化时,手动触发一个事件,让watch监听到这个事件,从而实现监听sessionStorage中某个key值的变化。
代码实现如下:
```
// 监听sessionStorage中某个key值的变化
watch: {
'$store.state.sessionStorageKey': function (newVal, oldVal) {
console.log('sessionStorageKey changed:', newVal, oldVal)
}
},
// 手动触发事件
methods: {
setSessionStorage: function (key, val) {
sessionStorage.setItem(key, val)
this.$store.state.sessionStorageKey = key + Math.random()
}
}
```
vue2 watch监听sessionstorage 监听不到变化啊
可以尝试使用第三方库vue-ls来监听sessionStorage的变化。首先需要安装vue-ls,然后在main.js中引入并配置。接着在需要监听的组件中使用watch监听sessionStorage的变化即可。
代码示例:
```javascript
// 安装vue-ls
npm install vue-ls --save
// main.js中引入并配置
import Vue from 'vue'
import VueStorage from 'vue-ls'
Vue.use(VueStorage, {
namespace: 'vuejs__', // key prefix
name: 'ls', // name variable Vue.[ls] or this.[$ls],
storage: 'session' // storage name session, local, memory
})
// 组件中使用watch监听sessionStorage的变化
export default {
data() {
return {
role: this.$ls.get('role') // 初始化时获取sessionStorage中的值
}
},
mounted() {
// 监听sessionStorage的变化
this.$watch('$ls.role', (val) => {
this.role = val
})
}
}
```