您的位置:首页 > 教育 > 培训 > 淘宝官网电脑版_福建省人民政府国有资产监督管理委员会_谷歌关键词搜索排名_品牌推广外包公司

淘宝官网电脑版_福建省人民政府国有资产监督管理委员会_谷歌关键词搜索排名_品牌推广外包公司

2025/8/8 0:41:27 来源:https://blog.csdn.net/qq_41162375/article/details/145062030  浏览:    关键词:淘宝官网电脑版_福建省人民政府国有资产监督管理委员会_谷歌关键词搜索排名_品牌推广外包公司
淘宝官网电脑版_福建省人民政府国有资产监督管理委员会_谷歌关键词搜索排名_品牌推广外包公司

1. 使用不同方法实现 姓名案例

需求: 根据data中 firstName 和 lastName 的值 来动态地展示全名

1.1. 插值语法

如果只使用学过的插值语法 那可以在模板中直接使用两个变量 . 但是如果需要对数据进行计算等处理  就需要在插值语法里写复杂的js表达式.  这样就违背了vue风格指南中"模板中使用简单表达式"的原则.

1.2. methods 方法

如果使用学过的 methods 方法 ,那么代码如下图所示 模板中的表达式看起来不复杂. 但是 vue的特性是 只要数据值改变 那么模板就会重新解析. 将用到该数据的所有地方重新计算展示 一旦 firstName 和 lastName 中任意值发生变化 所有用到fullName的地方都需要重新调用 会影响性能.  

methods中的函数如何拿到data中的数据?   这里methods配置项中的 普通函数由vue管理 其内部的this指向组件实例或vm. 又因为vm身上有data中的所有属性 所以可以在methods中使用this拿到data中的两个属性值

1.3. 计算属性computed

使用计算属性 可以把 根据firstName 和 lastName 计算得到的结果 命名为fullName 将其写成对象的形式 在该对象里面配置 getter和 setter 函数 分别用于读取fullName属性 和设置fullName属性

str.split(delim) 方法。它通过给定的分隔符 delim 将字符串分割成一个数组。

arr.join(glue) 与 split 相反。它会在它们之间创建一串由 glue 粘合的 arr 项。

读取 计算属性 fullName 即读取其内部getter函数return的返回值 又因为返回值依赖其他属性值 所以会通过计算得到结果  并且该结果会有缓存, 只要依赖的数据即 firstName和 lastName 不变化 无论fullName被使用多少次 都可以直接使用缓存的值 不需要重复调用. 节省性能.

计算属性 会直接放到vue实例上 属性值是getter函数的返回值 我们可以在vue模板中直接使用.如下图所示:

注意 getter和setter 必须写成普通函数的形式(非箭头)  这样其内部this指向的就是组件实例或Vm 方便使用实例身上的属性来进行计算.

1.4. 使用计算属性小结

(1) 什么时候使用计算属性?       要用到的属性值不存在 需要依赖已有属性计算得来.

(2) 底层原理是什么?                  底层借助了Object.defineproperty方法提供的getter和setter.

(3) gettr和setter函数分别在什么时候执行?

getter 执行:  ① 第一次读取计算属性值的时候  ② 所依赖的数据发生变化的时候 getter会被再次调用,将新值更新到页面中.

setter 执行: 当对计算属性进行赋值时执行 (注意setter内部 要引起计算时依赖的数据发生变化 )

( 依赖的数据发生了 对应的改变 ---> 读取计算属性时 其结果才会和赋值相同 如下图所示 当全名fullName被更改为张-三  在set函数中将其firstName和lastName进行相应更改( 张  三 ) 读取fullName时 getter函数才会返回新值 张-三)

(4) 计算属性的优势: 与methods相比 计算属性内部具有缓存机制(方便复用), 效率更高 调试方便.

(5)计算属性的简写形式

如果fullName计算属性 只会被读取 而不可能被赋值(修改). 那么不需要再写成对象里面包含getter和setter的格式,只需要写成 名为fullName的函数 返回计算的结果即可. VUE就会将 fullName和返回的结果 放在vue实例上方便读取.

2. 使用不同方法实现 天气案例

需求: 点击按钮切换天气.

2.1. 使用计算属性实现

使用计算属性实现 根据data中isHot的值 --> 计算出展示信息即 info的值

2.2. 使用监听属性实现

使用监听属性的两种写法 ①new vue时传入的配置项watch ②vm身上的$watch方法. 如下图所示:

当监听的 isHot属性(监听的可以是已有的data属性也可以是已有的计算属性) 值发生变化时.其内部配置的handler函数就会被调用.并且该函数可以接收 监听属性改变后的新值 和改变前的旧值.

注意: 监听的属性 必须先存在 才能举行监听.

2.3. 立即监听 深度监听与 watch监听的简写形式

深度监听: 如果监听的数据指向一个对象 ,那么默认监听的是该对象的引用地址. 如果想监听对象内部的属性 需要开启深度监听.

立即监听: 页面初始化时 就调用handler函数(数据无需改变)

监听属性的简写形式

如果监听属性时 只需要配置handler函数(无需立即调用与深度监听) 可以使用简写属性.

① watch配置项的简写

不再写成对象形式, 直接使用 监听的属性名 写成函数形式, 参数同样可以接收 newValue oldValue.

② vm上调用 $watch的简写

不再写成对象形式 而是直接写成匿名函数.

注意: new Vue时 传入的配置项里的函数 都是由vue进行管理的函数 都要写成普通函数(非箭头×)的形式.这样函数内部的this才会指向vue实例.

3. 计算属性与监听属性的区别

3.1. 使用监听属性实现 姓名案例

需要分别监听已有属性 firstName 和 lastName的变化 并且额外创建 fullName属性 当监听到改变时使 fullName属性发生对应的变化.

3.2. 两者的区别

watch监听 函数内部可以使用定时器 实现 1s之后修改对应属性值的效果.

但是 计算属性 依靠return 来改变属性值 所以无法使用定时器. 定时器中箭头函数的return是定时器内部的

不是 fullName函数的返回值. 所以无法使用定时器来改变计算属性的返回值

所以 当需要进行异步计算的时候 需要使用watch.

computed 能完成的功能 ---> watch 一定可以完成(只是没有缓存). 但是watch能完成的功能 ,computed不一定能完成( 不方便拿到newValue 和 oldValue 也不能异步操作 )

注意 : 下图中 定时器内部必须写箭头函数 因为定时器是js引擎调用的 定时器内部如果是普通函数 其this 指向 window.  只有写成箭头函数 它没有自身的this 继承其包含上下文的this 即firstName函数的this 才能指向vm 才能拿到vm身上的firstName和lastName属性值.

以上就是计算属性computed 和监听属性watch的基础使用方法.

------------------------------文章内容整理自禹神 Vue2 前端课程------------------------------------------------------

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com