vue计算属性

博客主要介绍了Vue的计算属性和事件修饰符。对于字符串反向问题,普通写法存在不足,Vue提出计算属性解决,可像全局变量使用。在事件处理方面,阻止事件冒泡的常规写法会导致代码重复,Vue提供事件修饰符,包括.stop、.prevent等,还封装了按键触发操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vue 计算属性
将一个 字符串 反向 ?
str ->arr- arr反向 ->str

普通写法:在vue中写一个方法在模板里调用,如下

<div id="app">
<p>{{msg}}</p>
<p>{{msgReverse()}}</p>
</div>


new Vue({
el: '#app',
data: {
msg: 'hello world'
},
methods: {
msgReverse() {
return this.msg.split('').reverse().join('')
}
}
})

总结:

如果说业务功能增加,我们发现 mustache 语法中的js逻辑有点多了

V是视图,作用是用来展示界面的,但是我们上面的写法 让 V 的负担增加

如果我们写在methods中写一个方法,然后运行这个方法,又有点觉得和我们认为的methods里面最好放事件处理程序不符

综合: 以上方式都不是最佳的选择
解决: Vue提出了一个新的解决方案: 计算属性 computed

计算属性:
计算属性中存放的是函数( 书写逻辑 )
计算属性可以直接像全局变量一样使用,直接将方法名当做全局变量一样使用

<body>
<div id="app">
<p>{{msgReverse}}</p>
</div>
</body>
<script>
new Vue({
el: '#app',
data: {
msg: 'hello world'
},
computed: {
msgReverse() {
return this.msg.split('').reverse().join('')
}
}

})

</script>

v-on 事件里的修饰符

业务: 阻止事件冒泡

事件冒泡原理:从目标向上进行传递事件 发现事件处理函数执行

常用写法:

.big{
width: 200px;
height: 200px;
background: red;
}
.middle{
width: 100px;
height: 100px;
background: blue;
}
.small{
width: 50px;
height: 50px;
background: yellow;
}


<div id="app">
<div class="big" @click = "bigHandler">
<div class="middle" @click = "middleHandler">
<div class="small" @click = "smallHanlder"></div>
</div>
</div>
</div>



new Vue({
el: '#app',
methods: {
bigHandler ( e ) {
e.stopPropagation()
alert( 'big' )
},
middleHandler ( e ) {
e.stopPropagation()
alert( 'middle' )
},
smallHanlder ( e ) {
e.stopPropagation()
alert( 'small' )
}
}

})

这是我们需要在我们的事件处理程序中添加阻止事件冒泡行为
但是我们发现,e.stopPropagation() 我们书写了三次

总结: 这么书写会导致代码重复,浪费性能

解决: 修饰符

格式: @eventType.修饰符 = “事件处理程序”

1.事件修饰符
.stop - 调用 event.stopPropagation()
.prevent - 调用 event.preventDefault()
.capture - 添加事件侦听器时使用 capture 模式。
.once - 只当事件是从侦听器绑定的元素本身触发时才触发回调。

.big {
width: 500px;
height: 500px;
background-color: red;
}
.middle {
width: 300px;
height: 300px;
background-color: yellow;
}
.small {
width: 100px;
height: 100px;
background-color: blue;
}


<div id="app">
    <div class="big" @click.stop="bigHandle">
    <div class="middle" @click.stop="middleHandle">
    <div class="small" @click.stop="smallHandle"></div>

    <div class="big" @click.self = "bigHandler">
    <div class="middle" @click.self = "middleHandler">
    <div class="small" @click.self = "smallHanlder"></div>
</div>



new Vue({
el: '#app',
methods: {
bigHandle(e) {
alert('big')
},
middleHandle(e) {
alert('middle')
},
smallHandle(e) {
alert('small')
}
}
})

2.按键修饰符

业务: input 按键 enter 时触发
Vue将通过事件对象 e 拿取键盘码的这个过程进行了封装

普通操作:

<div id="app">
<input type="text" v-model="val" @keyup="inputHandle">
</div>


new Vue({
el: '#app',
data: {
val: ''
},
methods: {
inputHandle(e) {
if (e.keyCode == 13) {
console.log(this.val)
}
}
}


})

修饰符写法:

写法一:

<div id="app">
<input type="text" v-model="val" @keyup.enter="inputHandle">
</div>


new Vue({
el: '#app',
data: {
val: ''
},
methods: {
inputHandle() {
console.log(this.val)
}
}

})

写法二:

<div id="app">
<input type="text" v-model="val" @keyup.n="fn">
</div>
Vue.config.keyCodes.n = 13
new Vue({
el: '#app',
data: {
val: ''
},
methods: {
fn() {
console.log(this.val)
}
}

})
### Vue.js 中计算属性的使用方法和特性 #### 1. 计算属性的基本定义Vue.js 中,计算属性(`computed`)是一种特殊的属性,它基于其他响应式依赖项自动生成并返回值。当这些依赖项发生变化时,计算属性会自动重新求值[^1]。 #### 2. 定义计算属性的方式 可以通过对象的形式来定义具有 `get` 和可选的 `set` 方法的计算属性: ```javascript new Vue({ data() { return { firstName: 'John', lastName: 'Doe' }; }, computed: { fullName: { get() { return `${this.firstName} ${this.lastName}`; }, set(newValue) { const names = newValue.split(' '); this.firstName = names[0]; this.lastName = names[1]; } } } }); ``` 上述代码展示了带有 getter 和 setter 的全名计算属性的例子[^4]。 #### 3. 计算属性的应用场景 通常情况下,如果需要根据某些数据动态生成新的数据显示给用户,则可以考虑使用计算属性。比如格式化日期时间、拼接字符串或者过滤列表等操作都可以放在计算属性里完成[^2]。 #### 4. 计算属性 vs Methods 虽然两者都能实现相同的功能,但是它们之间存在一些区别: - **缓存机制不同**:计算属性的结果会被缓存起来直到其依赖的数据发生改变才会再次执行;而 methods 则每次都会被调用。 - **适用范围差异**:对于简单的逻辑运算推荐使用计算属性;如果是复杂的业务流程则更适合放到 methods 中去处理。 #### 5. 计算属性与其他特性的配合 除了单独作为视图层的一部分外,还可以和其他功能相结合,如监听器 (`watch`) 或者生命周期钩子函数一起工作,从而满足更复杂的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值