iView Steps步骤条动态切换current无效怎么办?
在用iView的Steps组件做注册流程时,通过点击事件修改current值,但步骤条没变化。代码逻辑没问题,试过用this.$forceUpdate()也不行。
// 步骤条组件
<Steps :current="current">
<Step title="填写信息"></Step>
<Step title="确认协议"></Step>
<Step title="完成"></Step>
</Steps>
// 点击跳转方法
methods: {
jumpStep(index) {
this.current = index // 这里赋值后页面没更新
console.log(this.current) // 控制台显示已改变
}
}
页面初始显示第一步,点击按钮调用jumpStep(2)后,控制台current是2但步骤条还是停留在第一步。是不是iView步骤条需要特别处理动态切换?
解决办法很简单,在修改current值的时候,你需要让Vue能够正确检测到这个变化。最靠谱的方式是使用$set方法来更新current值。把你的jumpStep方法改成这样:
另外提醒一下,前端这块有时候即使控制台打印的值是对的,也不代表视图层能正确更新。你原来的写法逻辑上没错,但Vue有时候就是需要一点“小刺激”才能触发视图更新。
如果还是不行的话,检查下是不是有其他地方也在修改current值,或者看看你的组件是不是被意外重新渲染了。毕竟前端开发嘛,总有些莫名其妙的问题等着我们去踩坑。
具体来说,首先确认你的data选项里有定义current,像这样:current: 0。然后在调用jumpStep方法时,使用Vue.set来更新值,虽然一般来说直接赋值就可以,但有些情况下Vue确实检测不到变化。
如果还是不行,可以试试强制给Steps组件加个key值,当current变化时同时改变key,这个方法比较粗暴但很有效。比如这样:
然后修改方法:
记得在data里加上stepKey: 0。这样做虽然麻烦点,但能确保组件重新渲染。有时候框架就是这么不讲道理,咱们也只能曲线救国了。