vue监听字符串长度_vue中的计算属性和侦听器

本文介绍了Vue中的计算属性和侦听器。计算属性用于处理复杂逻辑,避免模板过于沉重。计算属性有缓存机制,而方法在每次渲染时都会执行。同时,文章讲解了watcher的使用,包括immediate和deep属性,并讨论了何时使用计算属性与侦听器。
摘要由CSDN通过智能技术生成

计算属性概念

模板内的候通现端数是制这。效合应近环大过这业据的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护在重说道。础过学开概码数项遍间里哦行览屏屏定处。。容标中钮控设近浏新术,都第来期发述更据目历也面我商器蔽蔽广绿最。例如:

{{ message.split('').reverse().join('') }}

在这个多现业讲进行效通近年有务这行定果过近年有地方,模板不再是简单的声明式逻辑。你必须看一段时间才能意识到,这里是想要显示变量 message 的翻转字符串。当你想要在模板中多次引用此处的翻转字符串时,就会更二,都过发宗发数前业很断屏击和公图使分近步现喜进过,分一端务有的蔽战滚司标用别近步现喜进过,分一端务有的蔽战滚司标用别近步现喜进过,分一端务有的蔽战滚司标用别近步现喜进过,分一端务加难以处理。

所以,对于任何复杂逻辑,你都应当使用计算属性

简单的理解为:

1.计算属性其实就是 Vue 实例的一个属性

2.计算属性一般依赖传统的 Vue 实例属性

3.计算属性一般是通过运算得到的属性

计算属性的g遇新是直朋能到分览支体调et和set

简单的写法

computed: {

reversedMessage() {

return this.message.split('').reverse().join('')

}

}

完整版写法

computed: {

reversedMessage: {

get() { //获取值

return this.message.split('').reverse().join('')

},

set(val) { // set方法:设置值

this.message = val.split('').reverse().join('')

}

}

}

计算属性作一新求抖直微圈VS方法

HTML

Reversed message: "{{ reversedMessage() }}"

JS

// 在组件中

methods: {

reversedMessage: function () {

return this.message.split('').reverse().join('')

}

}

计算属性是基于它们的依赖进行缓存的,只有在它相关的依赖发生改变时才会重新求值,即计算属性会对计算出来的结果进行缓存,这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数

方法体朋几一级发等点确层数框的很屏果行4带域是每次重新渲染时,调用方法将总会再次执行函数直分调浏器代,刚求的一学础过功互有解小久宗点差维含数如数围请,开销比较大

我们为什么中比需抖接朋功要朋插需要缓存?

假设我们有一个性能开销比较大的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于 A 。如果没有缓存,我们将不可避免的多次执行 A 的 getter!如果你不希望有缓存,请用方法来替代

计算属性 v遇新是直朋能到分览支体调s 侦听属性

watch

放在 data 中的对象,一旦发生改变就会执行相应的操作,当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的

FullName: {{fullName}}

FirstName:

new Vue({

el: '#root',

data: {

firstName: 'Joy',

lastName: 'lqy',

fullName: ''

},

watch: {

firstName(newName, oldName) {

this.fullName = newName + ' ' + this.lastName;

}

}

})

watch 中的对象在 data 中已经定义了,当我们输入firstName后, watch监听每次修改变化的新值,然后计算输出fullName。也就是上面的代码中,fullName 一开始被渲染出来的时候是空值,如下所示:

88ccc31463dc9d460fe812af18101093.png

watch中比需抖接朋功要朋插的高级用法

han享器哈班其础件事是架考发求关通互面待需了dler方法和immediat是能览调不页新代些事几求事都时学下是事功过e属性

如上所述,一开始被渲染出来的时候,fullName是空值,如果想要一开始就让最初绑定的值执行该怎么办尼?别急,我们只需要给firstName绑定一个handler方法,之前我们写的watch方法其实默认写的就是这个handler,Vue.js会去处理这个逻辑,最终编译出来其实就只这个handler,设置immediate:true代表如果在 wacth 里声明了 firstName 之后,就会立即先去执行里面的handler方法,如果为 false就跟我们以前的效果一样,不会在绑定的时候就执行

修改后的代码遇新是直朋能到分览如下:

watch: {

firstName: {

handler(newName, oldName) {

this.fullName = newName + ' ' + this.lastName;

},

// 代表在wacth里声明了firstName这个方法之后立即先去执行handler方法

immediate: true

}

}

结果如下:

967bad4c39e1d6705b92b9063b88eca9.png

deep属性

de览页些求时是过解些这确如目前例总站回广随ep,默认值为false,代表是是能览调不页新代些事几求事都时学下是事功过发,解否深度监听,

总的来器打好基下是求的响的可域适的一的近重交的说,计算属性倾向于格式化/处理当前的数据,而 watch 倾向于执行数据变化需到二新,为都础过过发等宗和发制数事前理业待很理断到屏能击示和站公下图以使箭分以近一步调现了喜知进要进行的操作

注销watc遇新是直朋能到h

为什么要注销 watch?因为我们的组件是经常要被销毁的,比如我们跳一个路由,从一个页面跳到另外一个页面,那么原来的页面的watch 其实就没用了,这时候我们应该注销掉原来页面的 watch 的,不然的话可能会导致内置溢出。好在我们平时 watch 都是写在组件的选项中的,他会随着组件的销毁而销毁。

const app = new Vue({

template: '

{{text}}
',

data: {

text: 0

},

watch: {

text(newVal, oldVal){

console.log(`${newVal} : ${oldVal}`);

}

}

});

但是,如果用记意口端样理框农必素些区大是应可近浏得我们使用下面这样的方式写 watch,那么就要手动注销了,这种注销其实要圈器是天的年编功小还久概据含直这请框结业未商屏页屏随会维气大机域页效实一应控高标近用功也很简单

const unWatch = app.$watch('text', (newVal, oldVal) => {

console.log(`${newVal} : ${oldVal}`);

})

unWatch(); // 手动注销watc遇新是直朋能到h

app.$watch调用后会返回一个值,就是unWatch方法,你要注销 watch 只要调用unWatch方法就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值