美文网首页前端填坑
Vue | v-for遍历的数组元素无法动态渲染

Vue | v-for遍历的数组元素无法动态渲染

作者: StAndres | 来源:发表于2020-01-07 17:40 被阅读0次

    需求

    如下图所示的一个密码隐藏/显示按钮

    隐藏/显示按钮
    理论上是一个很简单的功能,可以在data里写一个boolean,然后通过@click改变boolean状态控制密码的隐藏/显示。

    但是问题来了,这个隐藏按钮是通过v-for循环输出的。所以按照上面的写法,就会遇到看起来可以改变状态成功(控制台输出)但实则并没有任何反应的情况。

    怀疑人生反复查阅后才得知,v-for渲染的列表不能通过 arr[index] 修改数据,进行视图渲染

    解决方案:this.$set(array, index, newArray)方法。

    例:
    HTML

    <div v-for="(array, index) in arrayList">
      <!-- ... -->
      <input :type="arrayList[index].pswVisible?'text':'password'" :value="array.password" disabled>
      <a>
        <img @click="changeVisible(index)" :src="array[index].pswVisible?visibleSrc:InvisibleSrc">
      </a>
    </div>
    

    JS

    changeVisible (index) {
      let newArr = this.arrayList[index]
      newArr.pswVisible = !newArr.pswVisible
      Vue.set(this.accountsList, index, newArr)
    }
    

    如此这般,就行了。

    感谢以下文章抬一手,救我于苦海之中:

    vue使用v-for渲染列表后如何改变状态?
    Vue 列表渲染——v-for循环渲染细节

    相关文章

      网友评论

        本文标题:Vue | v-for遍历的数组元素无法动态渲染

        本文链接:https://www.haomeiwen.com/subject/liqdactx.html