首页 >> js开发 >> jsvue深度监听(监听对象和数组的改变)与立即执行监听实例js大全
jsvue深度监听(监听对象和数组的改变)与立即执行监听实例js大全
发布时间: 2021年1月13日 | 浏览:
| 分类:js开发
1.vue中监听对象数据属性值的改变,可以使用深度监听
data () {
return {
form: {
status: '',
cpufrequency: '',
systemstacksize: '',
scalabilityclass: ''
}
}
},
watch: {
form: { // 深度监听
handler(val, oldVal){
console.log('currentForm',val, oldVal)
// 但是这两个值打印出来却都是一样的,因为它们的引用指向同一个对象/数组
},
deep:true
}
}
data () {
return {
form: {
status: '',
cpufrequency: '',
systemstacksize: '',
scalabilityclass: ''
}
}
},
watch: {
form: { // 深度监听
handler(val, oldVal){
console.log('currentForm',val, oldVal)
// 但是这两个值打印出来却都是一样的,因为它们的引用指向同一个对象/数组
},
deep:true
}
}注意:我们应尽量避免在监听方法中更改当前监听对象的属性值,以免再次触发监听函数2.若只监听某个或部分属性值的变化,则可以配合计算属性computed来解决
data () {
return {
form: {
status: '',
cpufrequency: '',
systemstacksize: '',
scalabilityclass: ''
}
}
},
computed: {
status() {
return this.form.status
}
},
watch: {
status() {
console.log('currentVal', this.status)
}
}
data () {
return {
form: {
status: '',
cpufrequency: '',
systemstacksize: '',
scalabilityclass: ''
}
}
},
computed: {
status() {
return this.form.status
}
},
watch: {
status() {
console.log('currentVal', this.status)
}
}当然,上面这种方法会多出一个计算属性,并不是最好的方法,通过查看官方api,其实还有一种方法:
data () {
return {
form: {
status: '',
cpufrequency: '',
systemstacksize: '',
scalabilityclass: ''
}
}
},
watch: {
'form.status'(val, oldVal) {
console.log('currentVal', val)
}
}
data () {
return {
form: {
status: '',
cpufrequency: '',
systemstacksize: '',
scalabilityclass: ''
}
}
},
watch: {
'form.status'(val, oldVal) {
console.log('currentVal', val)
}
}3.取消监听
var unwatch = vm.$watch('a', cb) // 返回一个取消监听函数
unwatch() // 取消观察函数
var unwatch = vm.$watch('a', cb) // 返回一个取消监听函数unwatch() // 取消观察函数4.立即触发监听我们有时会有这个需求,在页面初始化时执行某个监听。因此,我们可能会在 created 中去调用需要执行的监听代码,但现在我们可以使用 immediate 来实现这个功能。
watch: {
'form.status'() {
handler(val, oldVal) {
// 执行一些操作
},
immediate: true
}
}
watch: {
'form.status'() {
handler(val, oldVal) {
// 执行一些操作
},
immediate: true
}
}补充知识:vue watch监听数据,新老值一样?让其不一样吧!补充知识:补充知识:vue watch监听数据,新老值一样?让其不一样吧!我就废话不多说了,大家还是直接看代码吧~
data:{
testData:{
dataInfo:{
a: '我是a',
b: '我是b'
}
}
},
watch: {
testData: {
handler: (val, olVal) => {
console.log('我变化了', val, olVal)
},
deep: true
}
}
data:{
testData:{
dataInfo:{
a: '我是a',
b: '我是b'
}
}
},
watch: {
testData: {
handler: (val, olVal) => {
console.log('我变化了', val, olVal)
},
deep: true
}
}如果testData发生了变化,就会打印出val,olVal,但是他们打印出来的结果都是一样的,因为数据同源。虽然可以监听到他的变化,但是要比较数据差异就不行了。如果想要得到不同的值可以结合计算属性。
data:{
testData:{
dataInfo:{
a: '我是a',
b: '我是b'
}
}
},
watch: {
testDataNew: {
handler: (val, olVal) => {
console.log('我变化了', val, olVal)
},
deep: true
}
},
computed: {
testDataNew() {
return JSON.parse(JSON.stringify(this.testData))
}
}
data:{
testData:{
dataInfo:{
a: '我是a',
b: '我是b'
}
}
},
watch: {
testDataNew: {
handler: (val, olVal) => {
console.log('我变化了', val, olVal)
},
deep: true
}
},
computed: {
testDataNew() {
return JSON.parse(JSON.stringify(this.testData))
}
}以上这篇vue深度监听(监听对象和数组的改变)与立即执行监听实例就是小编分享给大家的全部内容了,希望能给大家一个参考。
data () {
return {
form: {
status: '',
cpufrequency: '',
systemstacksize: '',
scalabilityclass: ''
}
}
},
watch: {
form: { // 深度监听
handler(val, oldVal){
console.log('currentForm',val, oldVal)
// 但是这两个值打印出来却都是一样的,因为它们的引用指向同一个对象/数组
},
deep:true
}
}
data () {
return {
form: {
status: '',
cpufrequency: '',
systemstacksize: '',
scalabilityclass: ''
}
}
},
watch: {
form: { // 深度监听
handler(val, oldVal){
console.log('currentForm',val, oldVal)
// 但是这两个值打印出来却都是一样的,因为它们的引用指向同一个对象/数组
},
deep:true
}
}注意:我们应尽量避免在监听方法中更改当前监听对象的属性值,以免再次触发监听函数2.若只监听某个或部分属性值的变化,则可以配合计算属性computed来解决
data () {
return {
form: {
status: '',
cpufrequency: '',
systemstacksize: '',
scalabilityclass: ''
}
}
},
computed: {
status() {
return this.form.status
}
},
watch: {
status() {
console.log('currentVal', this.status)
}
}
data () {
return {
form: {
status: '',
cpufrequency: '',
systemstacksize: '',
scalabilityclass: ''
}
}
},
computed: {
status() {
return this.form.status
}
},
watch: {
status() {
console.log('currentVal', this.status)
}
}当然,上面这种方法会多出一个计算属性,并不是最好的方法,通过查看官方api,其实还有一种方法:
data () {
return {
form: {
status: '',
cpufrequency: '',
systemstacksize: '',
scalabilityclass: ''
}
}
},
watch: {
'form.status'(val, oldVal) {
console.log('currentVal', val)
}
}
data () {
return {
form: {
status: '',
cpufrequency: '',
systemstacksize: '',
scalabilityclass: ''
}
}
},
watch: {
'form.status'(val, oldVal) {
console.log('currentVal', val)
}
}3.取消监听
var unwatch = vm.$watch('a', cb) // 返回一个取消监听函数
unwatch() // 取消观察函数
var unwatch = vm.$watch('a', cb) // 返回一个取消监听函数unwatch() // 取消观察函数4.立即触发监听我们有时会有这个需求,在页面初始化时执行某个监听。因此,我们可能会在 created 中去调用需要执行的监听代码,但现在我们可以使用 immediate 来实现这个功能。
watch: {
'form.status'() {
handler(val, oldVal) {
// 执行一些操作
},
immediate: true
}
}
watch: {
'form.status'() {
handler(val, oldVal) {
// 执行一些操作
},
immediate: true
}
}补充知识:vue watch监听数据,新老值一样?让其不一样吧!补充知识:补充知识:vue watch监听数据,新老值一样?让其不一样吧!我就废话不多说了,大家还是直接看代码吧~
data:{
testData:{
dataInfo:{
a: '我是a',
b: '我是b'
}
}
},
watch: {
testData: {
handler: (val, olVal) => {
console.log('我变化了', val, olVal)
},
deep: true
}
}
data:{
testData:{
dataInfo:{
a: '我是a',
b: '我是b'
}
}
},
watch: {
testData: {
handler: (val, olVal) => {
console.log('我变化了', val, olVal)
},
deep: true
}
}如果testData发生了变化,就会打印出val,olVal,但是他们打印出来的结果都是一样的,因为数据同源。虽然可以监听到他的变化,但是要比较数据差异就不行了。如果想要得到不同的值可以结合计算属性。
data:{
testData:{
dataInfo:{
a: '我是a',
b: '我是b'
}
}
},
watch: {
testDataNew: {
handler: (val, olVal) => {
console.log('我变化了', val, olVal)
},
deep: true
}
},
computed: {
testDataNew() {
return JSON.parse(JSON.stringify(this.testData))
}
}
data:{
testData:{
dataInfo:{
a: '我是a',
b: '我是b'
}
}
},
watch: {
testDataNew: {
handler: (val, olVal) => {
console.log('我变化了', val, olVal)
},
deep: true
}
},
computed: {
testDataNew() {
return JSON.parse(JSON.stringify(this.testData))
}
}以上这篇vue深度监听(监听对象和数组的改变)与立即执行监听实例就是小编分享给大家的全部内容了,希望能给大家一个参考。
相关文章:
- jsvue 中的动态传参和query传参操作js大全
- jsWebpack的Loader和Plugin的区别js大全
- js解决vue watch数据的方法被调用了两次的问题js大全
- js详解nginx配置vue h5 history去除#号js大全
- JavaScriptnodejs中内置模块fs,path常见的用法说明
- JavaScriptNode.js path模块,获取文件后缀名操作
- js解决Vue watch里调用方法的坑js大全
- js解决vue init webpack 下载依赖卡住不动的问题js大全
- jsvue-axios同时请求多个接口 等所有接口全部加载完成再处理操作js大全
- jsreact使用antd表单赋值,用于修改弹框的操作js大全