Vue.js从入门到跑路-方法、计算属性和侦听器
方法
要为组件添加一个方法,我们可以用到 method 选项
1 | //用于声明要混入到组件实例中的方法。 |
我们来实现一个显示全名
1 | {{ getFullName }} |
1 | data() { |
注解
@是指令 v-on 的简写,可以给元素绑定事件侦听器
方法中的
this` 指向当前活跃的组件实例
计算属性
我们用 computed 选项来声明要在组件实例上暴露的计算属性。
1 | computed: { |
我们同样实现一个显示全名
1 | {{ fullName }} |
1 | computed: { |
注意事项:计算属性的 getter 而没有任何其他的副作用,避免直接修改计算属性值
Watch 侦听器
使用 watch 选项在每次响应式属性发生变化时触发一个函数。
1 | watch:{} |
我们来实现一个侦听名字变化
1 | <h1>Full Name: {{ fullName }}</h1> |
1 | data() { |
可以看到当我们点击按钮,改变了firstName
和lastName
的值,控制台就提示了
watch
默认是浅层的:被侦听的属性,仅在被赋新值时,才会触发回调函数——而嵌套属性的变化不会触发。如果想侦听所有嵌套的变更,你需要深层侦听器:
1 | handler() {}, |
handler 设置一个回调函数,侦听属性变化,deep 设置为 true,vue 会侦听所有属性的变化
示例:
1 | data() { |
这样,无论你修改了 person 对象中的哪个属性,都会触发深层侦听器的回调函数。
另外还有几个属性
1 | immediate: true |
设置为 true 会强制立即执行回调,即在组件实例创建时会立即调用
1 | once: true |
设置为 true 时,回调函数只在属性变化时触发一次
1 | flush: 'post' |
使侦听器回调中能访问被 Vue 更新之后的所属组件的 DOM
1 | flush: 'sync' |
在 Vue 进行任何更新之前触发
1 | unwatch() |
停止侦听器
我们可以使用$watch()方法来命令式地创建一个侦听器
上文的代码可以改写如下
1 | this.$watch('person', (newVal, oldVal) => { |
计算属性和方法的区别
我们在上文的示例的计算属性和方法中都添加一个 console.log
观察浏览器控制台我们可以发现
计算属性fullName
使用console.log
来打印一条消息,以验证其是否被调用。每当firstName
或lastName
发生更改时,计算属性会自动重新计算并更新相应的文本。
方法getFullName
同样使用console.log
来打印一条消息,但它只有在模板中调用时才会执行。
同一个函数用计算属性和方法的不同之处
在于计算属性值会基于其响应式依赖被缓存。一个计算属性仅会在其响应式依赖更新时才重新计算。
计算属性适合做简单的操作,而方法适合做复杂的操作,通常作为事件侦听和公共业务逻辑使用。
计算属性和 watch 的区别
计算属性适合简单的业务逻辑,而 watch 适合耗时的操作
计算属性有返回值而 watch 没有
方法和 watch 的区别
方法可以在 watch 中调用而 watch 不行
方法可以有返回值而 watch 没有
Vue.js从入门到跑路-方法、计算属性和侦听器