vue v-if未生效问题

事实证明,v-if本身是没有什么问题的,问题出在对应的变量身上。

前不久我使用VUE开发时遇到一个问题,好像v-if不起作用。什么意思呢,v-if是一个条件表达式,当且仅当条件满足时才触发,但在我的程序中,它好像有时条件明明不满足,也会被触发。

这就很麻烦了。难道是VUE这个破烂不行?

事实上,VUE是没啥问题的,是我不行。

代码如图
在这里插入图片描述
问题其实出在"edit"这个变量里。如果将edit换成“true/false”,就一点问题没有,运行结果毫不含糊。但换成变量就不一定了。原因是,我这些代码放在iView的一个模式对话框modal里,而modal的所谓关闭,其实只是隐藏,并没有从内存中去掉。当再次打开时,edit还是上一次展现时用的值,但我没有意识到,总认为对话框重新出现时,上面的变量一定是新的。我的思维,还停留在原始的网页开发上。众所周知,http协议是无状态的,网页关闭、打开,所有的信息都是重新初始化过的。而现在vue等开发平台,默认是单页系统,只有一个页面,所有东西在上面,基本都是动态加载,一旦加载,默认又会缓存下来。

这样做好许多好处,节省资源,速度快,用户体验好。缺点,似乎是开发的复杂度增加了。


2021.11.23

v-if 与 v-show 的区别:二者都对应条件,当条件不满足时,v-if不加载,v-show加载但不显示。

在运行过程中,v-if的条件切换,由不满足到满足时,v-if对应组件加载。但这有个过程。期间组件不一定能访问。因此,需要将组件访问语句放在this.$nextTick里,以免报错。

<!-- 当edit为真,加载Editor组件,否则加载Report组件 -->
<Report ref="report1" v-if="!edit" />
<Editor ref="editor1" v-if="edit" />
checkOver () { // 校核归来
  this.edit = false
  let _this = this
  this.$nextTick(() => {
    _this.$refs.report1.init(_this.id)
  })
},
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue的data属性是用来存储组件中的数据的,但有时候我们可能会遇到data赋值不生效的情况。造成这种情况的原因可能有以下几种: 1. 对象引用问题Vue会对data属性进行响应式处理,当我们对data中的某个属性进行赋值时,Vue会自动检测到数据的变化并更新DOM。但如果我们将data中的某个属性直接赋值为一个新的对象时,Vue就无法检测到数据的变化。解决这个问题的方法是使用Vue提供的方法(例如Vue.set或this.$set)来对对象属性进行赋值。 2. 异步问题:有时候我们可能会在created或mounted钩子函数中进行数据赋值,但由于JavaScript是单线程的,当我们在这些钩子函数中进行异步操作(例如发起网络请求)时,数据可能还没有赋值成功就被渲染到了DOM上。解决这个问题的方法是使用适当的生命周期钩子函数或异步操作的回调函数来确保数据赋值成功后再进行渲染。 3. 变量命名问题:有时候我们可能会在组件中定义一个与data属性同名的变量,这样就会导致数据赋值不生效。这是因为Vue会优先使用组件中的局部变量而不是data属性。解决这个问题的方法是使用this关键字来访问data属性,例如this.$data.property。 总之,对于Vue data赋值不生效问题,我们需要仔细检查对象引用、异步操作和变量命名等方面的问题,以确保数据能够正确地进行赋值和更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值