Vue: method/computed/watch的使用和区别
vue作为一个轻量级高性能的前端框架,还是比较易上手的,下面来以一个java开发者的角度来看method/computed/watchmethods在vue中method就是普通意义的function域,可以定义方法来进行属性的修改,或者返回,很简单下面来看例子:<template><p>{{msg}}&
vue作为一个轻量级高性能的前端框架,还是比较易上手的,下面来以一个java开发者的角度来看method/computed/watch
methods
在vue中method就是普通意义的function域,可以定义方法来进行属性的修改,或者返回,很简单下面来看例子:
<template>
<p>{{msg}}</p>
<button v-on:click="reverseMessage">逆转消息</button>
</template>
export default {
name: 'Home',
data: function () {
return {
......
msg: 'this msg for vue.js!!!',
......
}
},
methods: {
reverseMessage: function () {
this.msg = this.msg.split('').reverse().join('')
return this.msg
}
......
显而易见 就是一个对msg这个串的反转;
computed
其实在一定程度上 methods和computed效果是一样的.但是:
计算属性(computed)是基于它们的依赖进行缓存的。计算属性只有在它的相关依赖发生改变时才会重新求值。这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。
可以这样理解,computed并不是一个方法,而是依赖于属性的,就是一个属性的封装,属性的值不变化,那么不会多次调用computed,所以性能更好
ok~ 继续抛出一个例子:
<template>
<p>Computed reversed message: "{{ reversedMessage }}"</p>
</template>
export default {
name: 'Home',
data: function () {
return {
......
}
},
computed: {
// 计算属性的 getter
reversedMessage: function () {
// console.log('1')
return this.msg.split('').reverse().join('')
}
}
......
watch
Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性。当你有一些数据需要随着其它数据变动而变动时,你很容易滥用 watch——特别是如果你之前使用过 AngularJS。然而,通常更好的做法是使用计算属性而不是命令式的 watch
- 下面这段代码摘自官网
### watch
var vm = new Vue({
el: '#demo',
data: {
firstName: 'Foo',
lastName: 'Bar',
},
watch: {
firstName: function (val) {
this.fullName = val + ' ' + this.lastName
},
lastName: function (val) {
this.fullName = this.firstName + ' ' + val
}
}
})
### computed
var vm = new Vue({
el: '#demo',
data: {
firstName: 'Foo',
lastName: 'Bar'
},
computed: {
fullName: function () {
return this.firstName + ' ' + this.lastName
}
}
})
显而易见watch在这里就显得有一些多余了
但是watch其实他是一个侦听,就类似与java中的接口会调,可以支持异步操作
抛一段代码:
<template>
{{firstname}}
<button @click="firstname = 'change complete'">修改txt</button>
</template>
export default {
name: 'Home',
data: function () {
return {
......
firstname: 'hello',
......
}
},
watch: {
firstname: function (newval, oldval) {
console.log(oldval, newval)
}
......
在div中input输入框v-model这个firstname,然后在input中输入时,watch会侦听这个firstname,进而打出newval和oldval的日志
method/computed/watch是vue中script域中核心的使用,感谢阅读,期待一起进步
更多推荐
所有评论(0)