昨天,在项目中做一个功能,一个tab切换,点击其中一个tab的时候,调用组件中的查询方法,切只调用一次。再次切换的时候不再调用。

我的做法是:

在父组件中创建一个变量,初始化data中设为0,在点击tab的时候设为1。将变量传给子组件,在并且在子组件中监听这个变量,然后执行查询方法。

但是,我遇到了一个问题,就是在子组件中只能监听到新的值,监听不到旧的值,代码如下:

父组件:

<template>
<div>
<div v-if="100 == whitchOne">
<packageitems :packagedata="packageData" :number1="number1"></packageitems>
</div>
</div>
</template>
import packageItems from "@/views/cart/components/newAssets/packageItems";
export default{
data(){
return{
number1:'0'
}
},
methods:{
showOwn(idx) {
if (idx == 100) {
this.number1 == 1 ? '' : this.number1 = 1;
}
}
}
}

子组件:

watch: {
// 点击新增资产搜索
number1: {
handler: function(val, oldval) {
console.log("val:" + val, "oldval:" + oldval);
if (val == '0') {
return false;
}
this.getPackages((this.keywords = this.formData.addAsset.packName), (this.prodNbrs = ""));
},
immediate: true,
deep: true
},

每次打印出来的值就是

val: 1 oldval: undefined

找了许久,都没有找到原因是什么,后来才发现原因不在于watch,而在于父组件中的v-if,不应该用v-if,而是应该用v-show

那么下面我们来说一下v-if和v-show的区别:

  • v-if:根据后面数据的真假,从DOM树上直接删除或重建DOM节点;如果初始条件为假,          则什么也不做;只有在条件第一次变为真时才开始局部编译。
  • v-show:只是修改diaplay的属性的显示和隐藏,元素始终在DOM树上;在任何条件下                  (首次条件是否为真)都被编译,然后被缓存,而且DOM元素始终被保留

在我所做的功能中显示隐藏组件用的是v-if,所以组件在初始化的时候是number1是没有被编译的,而且每次切换到该组件的时候都是重新编译,这样旧值就一直都是undefined。而v-show则不同,它初始化的时候就被创建了,切换就是显示和隐藏,不存在没有被编译找不到元素的情况。所以在这种会频繁切换的功能中要用v-show。

子组件监听props中的值,监听不到旧值的相关问题的更多相关文章

  1. VUE中父组件向子组件传递数据 props使用

    VUE中,子组件是不能直接访问父组件的数据(一般来说,当然如果你要破坏原则也是可以),如下< <body> <div id="fathercomponent" ...

  2. Vue父子组件数据双向绑定,子组件可修改props

    第一种,子组件通过监听父组件数据,子组件改变数据之后通知给父组件 原文链接:https://blog.csdn.net/m0_37728716/article/details/81776929 父组件 ...

  3. 【vue开发】 父组件传值给子组件时 ,watch props 监听不到解决方案

    解决方案: watch:{ data:{ immediate:true, handler:function(){ } }} 示例:  

  4. 父组件传值给子组件时 ,watch props 监听不到解决方案

    watch:{ data:{ immediate:true, handler:function(){ } } }

  5. Vue (表单、斗篷、条件、循环指令,分隔符成员、计算属性成员、属性的监听、vue组件、子组件、各个常见的钩子函数)

    表单指令 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF- ...

  6. problem: vue之数组元素中的数组类型值数据改变却无法在子组件视图更新问题

    问题:给父组件上的一个数组中的某个元素中的数组类型值,添加值后,数据没有在子组件上更新. 对元素添加值之后,vue的数据其实已经更新了并传给了子组件,子组件中没有立即更新. 那么这里有个问题,在子组件 ...

  7. React中父组件与子组件之间的数据传递和标准化的思考

    React中父组件与子组件之间的数据传递的的实现大家都可以轻易做到,但对比很多人的实现方法,总是会有或多或少的差异.在一个团队中,这种实现的差异体现了每个人各自的理解的不同,但是反过来思考,一个团队用 ...

  8. Vue中的父组件给子组件传值

    父子组件传值: 父组件在调用子组件的地方,添加一个自定义的属性,属性的值就是你要传递给子组件的数据,如果值是一个变量,那么需要使用到绑定属性: 在子组件定义的地方,添加一个props选项,值为一个数组 ...

  9. vue中父组件给子组件传值的方法

    顺序............................................. -------------列表组件,注册组件.调用使用组件----------------- 1,子组件 ...

  10. vue中父组件给子组件额外添加参数

    1 子组件: this.$emit('callbackone',item.parentId) 2 父组件: @callbackone="callbackone($event,index)&q ...

随机推荐

  1. 【YashanDB数据库】大事务回滚导致其他操作无法执行,报错YAS-02016 no free undo blocks

    问题现象 客户将一个100G的表的数据插入到另一个表中,使用insert into select插入数据.从第一天下午2点开始执行,到第二天上午10点,一直未执行完毕. 由于需要实施下一步操作,客户k ...

  2. Chrome 浏览器插件获取网页 window 对象(方案三)

    前言 最近有个需求,是在浏览器插件中获取 window 对象下的某个数据,当时觉得很简单,和 document 一样,直接通过嵌入 content_scripts 直接获取,然后使用 sendMess ...

  3. JS实现树形结构数据的模糊搜索查询

    简单示例: 需求:输入 "题2" 字,希望树形结构中带有 "题2" 字的项显示,即使父节点没有,但子节点含有,父节点仍要返回. let arr = [ { ti ...

  4. 借助 Flutter 顺畅地开发多平台应用

    Flutter 已于近期发布了 Flutter 2,Flutter 和 Dart 的产品总监 Tim Sneath 在 2021 年三月上旬举办的 Flutter Engage 活动中表示,Flutt ...

  5. 关于 B 先生

    B 先生是不是要疯了,他今天说的都是他妈什么几把

  6. Serilog文档翻译系列(六) - 可用的接收器、增强器、格式化输出

    01.提供的接收器 Serilog 使用接收器将日志事件以各种格式写入存储.许多接收器由更广泛的 Serilog 社区开发和支持:可以通过在 NuGet 上搜索 serilog 标签找到. 02.增强 ...

  7. .NET 跨平台工业物联网网关解决方案

    前言 随着工业4.0时代的到来,物联网技术正在以前所未有的速度改变着我们的生产和生活方式.本文给大家介绍一个基于 .NET 6 开发的跨平台工业物联网网关解决方案. 工业物联网(IIoT)成为了连接物 ...

  8. Blinn-Phong

    为什么出现Blinn-Phong 虽然Phong性能较高,但是在某些镜面反射条件下就会失效.比如下图,我们明显发现了一条明显的亮暗边界线,这在实际场景中是不应该发生的(实际场景中不会出现这种明显的过渡 ...

  9. 使用Swagger的好处

    是一个规范和完整的框架 用于生成.描述.调用和可视化RESTful风格的Web服务 接口的文档在线自动生成 功能测试

  10. 云原生周刊:Helm Charts 深入探究 | 2024.3.11

    开源项目推荐 Glasskube Glasskube 提供了一个用于 Kubernetes 的缺失的包管理器.它具有图形用户界面(GUI)和命令行界面(CLI).Glasskube 包是具备依赖感知. ...