如何使用Vue中watch

这次给大家带来如何使用Vue中watch,使用Vue中watch的注意事项有哪些,下面就是实战案例,一起来看一下。

假设有如下代码:

fullname: {{fullname}}

FirstName:

new Vue({ el: '#root', data: { firstName: 'Dawei', lastName: 'Lou', fullName: '' }, watch: { firstName(newName, oldName) { this.fullName = newName + ' ' + this.lastName; } } })

登录后复制

上面的代码的效果是,当我们输入firstName后,wacth监听每次修改变化的新值,然后计算输出fullName。

handler方法和immediate属性

这里 watch 的一个特点是,最初绑定的时候是不会执行的,要等到 firstName 改变时才执行监听计算。那我们想要一开始就让他最初绑定的时候就执行改怎么办呢?我们需要修改一下我们的 watch 写法,修改过后的 watch 代码如下:

watch: { firstName: {  handler(newName, oldName) {   this.fullName = newName + ' ' + this.lastName;  },  // 代表在wacth里声明了firstName这个方法之后立即先去执行handler方法  immediate: true }}

登录后复制

注意到handler了吗,我们给 firstName 绑定了一个handler方法,之前我们写的 watch 方法其实默认写的就是这个handler,Vue.js会去处理这个逻辑,最终编译出来其实就是这个handler。

而immediate:true代表如果在 wacth 里声明了 firstName 之后,就会立即先去执行里面的handler方法,如果为 false就跟我们以前的效果一样,不会在绑定的时候就执行。

deep属性

watch 里面还有一个属性 deep,默认值是 false,代表是否深度监听,比如我们 data 里有一个obj属性:

obj.a: {{obj.a}}

obj.a:

new Vue({ el: '#root', data: { obj: { a: 123 } }, watch: { obj: { handler(newName, oldName) { console.log('obj.a changed'); }, immediate: true } } })

登录后复制

当我们在在输入框中输入数据视图改变obj.a的值时,我们发现是无效的。受现代 JavaScript 的限制 (以及废弃 Object.observe),Vue 不能检测到对象属性的添加或删除。由于 Vue 会在初始化实例时对属性执行 getter/setter 转化过程,所以属性必须在 data 对象上存在才能让 Vue 转换它,这样才能让它是响应的。

默认情况下 handler 只监听obj这个属性它的引用的变化,我们只有给obj赋值的时候它才会监听到,比如我们在 mounted事件钩子函数中对obj进行重新赋值:

mounted: { this.obj = {  a: '456' }}

登录后复制

这样我们的 handler 才会执行,打印obj.a changed。

相反,如果我们需要监听obj里的属性a的值呢?这时候deep属性就派上用场了!

watch: { obj: {  handler(newName, oldName) {   console.log('obj.a changed');  },  immediate: true,  deep: true }}

登录后复制

deep的意思就是深入观察,监听器会一层层的往下遍历,给对象的所有属性都加上这个监听器,但是这样性能开销就会非常大了,任何修改obj里面任何一个属性都会触发这个监听器里的 handler。

优化,我们可以是使用字符串形式监听。

watch: { 'obj.a': {  handler(newName, oldName) {   console.log('obj.a changed');  },  immediate: true,  // deep: true }}

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

立即学习“前端免费学习笔记(深入)”;

推荐阅读:

使用JS判断字符串中包含内容方法总结

Angular+RouterLink做出不同的花式跳转

以上就是如何使用Vue中watch的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2751978.html

(0)
上一篇 2025年3月8日 06:05:42
下一篇 2025年2月27日 05:35:57

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 怎样实现Vue项目中使用Vux

    这次给大家带来怎样实现Vue项目中使用Vux,Vue项目中使用Vux的注意事项有哪些,下面就是实战案例,一起来看一下。 默认已安装vue环境 1.安装vux npm install vux –save-dev 2.安装vux-l…

    2025年3月8日
    200
  • 如何操作Vue项目内使用d3.js

    这次给大家带来如何操作Vue项目内使用d3.js,Vue项目内使用d3.js的注意事项有哪些,下面就是实战案例,一起来看一下。 之前写一个 Demo里面 有些东西要使用d3实现一些效果 但是在很多论坛找资源都找不到可以在Vue里面使用D3.…

    2025年3月8日
    200
  • 如何制作并使用Vue波纹按钮组件

    这次给大家带来如何制作并使用Vue波纹按钮组件,制作并使用Vue波纹按钮组件的注意事项有哪些,下面就是实战案例,一起来看一下。 先说一下用法: 默认按钮默认按钮定义速度和初始的波浪透明度 登录后复制 原理: 这里用的是canvas + re…

    编程技术 2025年3月8日
    200
  • 怎样进行JS内DOM节点使用

    这次给大家带来怎样进行JS内DOM节点使用,JS内DOM节点使用的注意事项有哪些,下面就是实战案例,一起来看一下。 DOM操作在JS中可以说是非常常见了吧,很多网页的小功能的实现,比如一些元素的增删操作等都可以用JS来实现。那么在DOM中我…

    2025年3月8日
    200
  • 通过在Vue中使用vue2-highcharts如何实现曲线数据展示的方法?

    下面我就为大家分享一篇vue 中使用vue2-highcharts实现曲线数据展示的方法,具有很好的参考价值,希望对大家有所帮助。 1、要实现的效果如下图: 2、vue前端页面如下:              历史曲线           …

    2025年3月8日
    200
  • 怎样操作vscode内使用.vue代码

    这次给大家带来怎样操作vscode内使用.vue代码,操作vscode内使用.vue代码的注意事项有哪些,下面就是实战案例,一起来看一下。 1.设置.vue模板 打开注意事项,点击文件 —— 首选项 —— 用户代码片段,会弹出来一个输入框。…

    2025年3月8日
    200
  • 通过在vue项目中使用ueditor(详细教程)

    下面我就为大家分享一篇vue项目中使用ueditor的实例讲解,具有很好的参考价值,希望对大家有所帮助。 以vue-cli生成的项目为例 1.static文件夹下先放入ueditor文件 2.index.html添加如下代码 登录后复制 立…

    编程技术 2025年3月8日
    200
  • 如何使用Angular5路由传值

    这次给大家带来如何使用Angular5路由传值,使用Angular5路由传值的注意事项有哪些,下面就是实战案例,一起来看一下。 目前Angular已经升级到了稳定版本Angular5,这次升级更小更快以及更稳定!路由可以说是Angular甚…

    编程技术 2025年3月8日
    200
  • 如何使用Vue nextTick

    这次给大家带来如何使用Vue nextTick,使用Vue nextTick的注意事项有哪些,下面就是实战案例,一起来看一下。 export default { data () { return { msg: 0 } }, mounted …

    编程技术 2025年3月8日
    200
  • 怎样进行vue弹窗组件使用

    这次给大家带来怎样进行vue弹窗组件使用,vue弹窗组件使用的注意事项有哪些,下面就是实战案例,一起来看一下。 弹窗是一个项目必备的复用利器,所以封装起来,保证项目ui一致,是很有必要的。学了一段时间vue,想想还是用vue写一下吧。用的很…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论