大庆建设局网站新网站百度收录
3.1 计算属性和监视属性
3.1.1 计算属性
计算属性是一种计算值的方式,可以根据其他属性的值来动态地计算新的属性值。计算属性可以缓存计算结果,当依赖的属性发生改变时,才会重新计算。在Vue中,可以使用computed选项来定义计算属性,例如:
<template><div>{{ fullName }}</div> </template><script> export default {data() {return {firstName: '张',lastName: '三'}},computed: {fullName() {return this.firstName + '-' + this.lastName}} } </script>
3.1.2 监视属性
监视属性用于监听一个属性的变化,并在变化时执行相应的操作。在Vue中,可以使用watch选项来定义监视属性,例如:
<template><div>{{ message }}</div> </template><script> export default {data() {return {count: 0,message: ''}},watch: {count(newValue, oldValue) {this.message = 'Count changed from ' + oldValue + ' to ' + newValue}} } </script>
3.1.3 两个属性的异同
相同点:
- 都是处理响应式数据的方法,可以实时监控数据变化并做出相应的响应。
- 都可以依赖于其他数据(data 中的属性、计算属性、甚至是其他监视属性),当这些数据变化时,计算属性和监视属性都会重新计算/执行。
不同点:
- 计算属性是根据它的依赖属性(data 中的属性、计算属性)动态计算而来,它会根据依赖属性的变化自动重新计算;而监视属性是在某个属性变化时执行一段特定的代码,可以用来处理一些复杂的业务逻辑。
- 计算属性可以缓存计算结果,当依赖的属性没有发生变化时,会直接返回之前缓存的计算结果,提高了性能;而监视属性不能缓存计算结果,每次依赖属性变化时都会重新计算。
- 计算属性可以直接在模板中使用,不需要手动调用;而监视属性只能通过代码来触发执行。
3.1.4 使用场景
计算属性的使用场景:
- 需要根据多个依赖属性计算得出一个属性值的场景,如一个购物车的总价。
- 需要对某个属性进行复杂的逻辑计算,如对一个列表进行排序、筛选等操作。
- 需要对模板中的数据进行格式化,如将时间戳转化为日期格式。
- 需要对数据进行缓存,避免频繁计算,如根据条件过滤后的结果。
监视属性的使用场景:
- 当需要在某个属性发生变化时执行一些操作,如发送 Ajax 请求、更新本地存储、修改其他数据等。
- 当需要监听一个复杂对象或数组的变化时,如监听一个表单对象的变化,可以使用深度监视。
- 当需要在组件加载时或销毁时执行一些操作时,如在组件加载时获取数据、在组件销毁时清除定时器。
总的来说,计算属性适合处理复杂的属性计算和数据格式化等场景,而监视属性适合监听数据的变化和执行一些特定的操作等场景,需要根据具体的业务需求来选择使用哪个特性。
3.2 v-show和v-if
3.2.1 作用
v-show
和v-if
是 Vue.js 框架中的指令,都用于控制元素的显示与隐藏。使用v-show
或v-if
指令,将其添加到需要控制显示与隐藏的元素上,例如:<div v-show="isVisible">Hello, World!</div> <div v-if="isVisible">Hello, World!</div>
isVisible
是一个布尔类型元素,当isVisible
的值为true
时,元素会显示出来,当isVisible
的值为false
时,元素会隐藏起来。
3.2.2 区别
v-show
通过 CSS 样式的控制来显示或隐藏元素。当v-show
的值为true
时,元素会被设置为display: block
,显示出来;当v-show
的值为false
时,元素会被设置为display: none
,隐藏起来。这种方式虽然不需要重新渲染 DOM,但是元素依然存在于页面中,可能会影响页面布局和性能。v-if
是基于条件判断的动态组件,它会根据条件动态地添加或删除元素,以实现显示或隐藏的效果。当v-if
的值为true
时,元素会被添加到 DOM 中,显示出来;当v-if
的值为false
时,元素会从 DOM 中移除,隐藏起来。这种方式虽然需要重新渲染 DOM,但是可以更好地控制页面的布局和性能。
3.2.3 使用场景
v-show
适用于需要频繁切换显示与隐藏的元素,因为它的切换速度比v-if
快,不需要重新渲染 DOM。但是,如果需要在初始渲染时就确定元素是否需要显示,应该优先考虑使用v-if
指令,因为它可以在元素的添加和删除之间切换,可以更好地控制 DOM 的渲染和销毁。v-if
适用于需要根据条件动态地添加或删除元素的场景,例如当数据满足一定条件时才需要显示某个元素。但是,如果需要频繁切换元素的显示与隐藏,应该优先考虑使用v-show
指令,因为它的切换速度更快,不需要重新渲染 DOM。
3.3 过滤器
Vue.js 中的过滤器(filters)是一种用于格式化文本输出的工具,可以在模板中使用
{{ }}
插值表达式和v-bind
指令中使用。它可以将原始数据进行处理和转换,生成一个新的值,然后输出到视图中显示给用户。Vue.js 中的过滤器可以通过全局过滤器和局部过滤器两种方式来定义。全局过滤器可以在任何 Vue 实例中使用,而局部过滤器只能在定义它的组件实例中使用。
下面是使用全局过滤器的例子:
<!-- 定义全局过滤器 --> <script> Vue.filter('uppercase', function(value) {return value.toUpperCase(); }); </script> <!-- 在模板中使用过滤器 --> <div>{{ message | uppercase }}</div>
上面的例子中,我们定义了一个名为
uppercase
的全局过滤器,用于将字符串转换为大写格式。在模板中,我们使用|
管道符将需要过滤的数据message
与过滤器名称uppercase
进行连接,输出的结果将是message
中的字符串全部大写。除了字符串转换,过滤器还可以进行格式化日期、数字、货币等各种类型的数据。Vue.js 内置了一些常用的过滤器,如
capitalize
(将首字母转换为大写)、currency
(将数字格式化为货币格式)等,也可以通过自定义过滤器来满足特定的需求。