el-form-item prop属性动态绑定不生效问题及解决

下面是“el-form-item prop属性动态绑定不生效问题及解决”的完整攻略:

问题描述

在Vue.js的Element UI框架中,使用el-form-item组件时,有时即便将组件的prop属性动态绑定到数据对象上,但修改数据对象时却没有触发组件的重新渲染,导致绑定失效。

例如,如下代码中的el-form-item组件,虽然将其prop属性disabled动态绑定到表单数据对象的disabled属性上,但控件仍然可以被点击和编辑。

<template>
  <el-form :model="form">
    <el-form-item label="名称" :prop="disabled ? '' : 'name'" :disabled="disabled">
      <el-input v-model="form.name"></el-input>
    </el-form-item>
  </el-form>
</template>
<script>
export default {
  data() {
    return {
      disabled: true,
      form: {
        name: 'John'
      }
    }
  },
  mounted() {
    setTimeout(() => {
      this.disabled = false
      this.form.name = 'Smith'
    }, 2000)
  }
}
</script>

原因分析

这个问题的原因在于,el-form-item组件的prop属性在首次渲染后被缓存,即使后面prop属性的值改变了,组件也不会重新渲染,因此动态绑定失效。

解决方案

解决这个问题的方法有两种:

1. 给el-form-item设置:key属性

方法是在el-form-item组件上添加:key属性,将其绑定到一个唯一的值上,例如:

<template>
  <el-form :model="form">
    <el-form-item label="名称" :prop="disabled ? '' : 'name'" :disabled="disabled" :key="getKey('name')">
      <el-input v-model="form.name"></el-input>
    </el-form-item>
  </el-form>
</template>
<script>
export default {
  data() {
    return {
      disabled: true,
      form: {
        name: 'John'
      }
    }
  },
  methods: {
    getKey(prop) {
      return this.disabled ? '' : prop
    }
  },
  mounted() {
    setTimeout(() => {
      this.disabled = false
      this.form.name = 'Smith'
    }, 2000)
  }
}
</script>

在方法getKey中,根据组件的prop属性值动态返回一个key值。这样,每当prop属性值改变时,就会以不同的key值重新渲染el-form-item组件,达到动态绑定的目的。

2. 使用v-if条件渲染

方法是使用v-if指令,将el-form-item组件放入一个div元素中,并通过一个条件表达式决定是否渲染该div元素。例如:

<template>
  <el-form :model="form">
    <div v-if="!disabled">
      <el-form-item label="名称" prop="name" :disabled="disabled">
        <el-input v-model="form.name"></el-input>
      </el-form-item>
    </div>
    <div v-else>
      <el-form-item label="名称">
        <el-input v-model="form.name" disabled></el-input>
      </el-form-item>
    </div>
  </el-form>
</template>
<script>
export default {
  data() {
    return {
      disabled: true,
      form: {
        name: 'John'
      }
    }
  },
  mounted() {
    setTimeout(() => {
      this.disabled = false
      this.form.name = 'Smith'
    }, 2000)
  }
}
</script>

这里使用了两个div元素,分别包含有和无disabled属性的el-form-item组件。通过v-if指令,在组件的prop属性修改后,判断该条件表达式的值,动态渲染相应的div元素和子组件,达到动态绑定的目的。

总结

以上是解决“el-form-item prop属性动态绑定不生效问题”的两种方法,它们各有利弊,可以根据实际情况选择合适的一种。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:el-form-item prop属性动态绑定不生效问题及解决 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)

    当我们需要在网页中展示当前日期时间的时候,可以使用JavaScript来获取当前日期时间,并以设定的格式进行展示。下面是获取当前日期时间的方法: 1. 使用Date对象的toLocaleString()方法获取当前日期时间 let now = new Date(); let year = now.getFullYear(); // 获取当前年份 let mo…

    JavaScript 2023年5月27日
    00
  • js数组的基本使用总结

    JS数组的基本使用总结 什么是数组 数组是一种特殊的对象,可以用来存储一组有序的数据。数组的每个元素都有一个索引,以此来确定元素在数组中的位置。 创建和使用数组 在JavaScript中,我们可以使用以下两种方式来创建数组: 直接声明 let arr = [1, 2, 3, 4, 5]; 通过构造函数创建 let arr = new Array(1, 2, …

    JavaScript 2023年5月27日
    00
  • Javascript中的作用域和上下文深入理解

    Javascript中的作用域和上下文深入理解 在理解Javascript中的作用域和上下文之前,需要先了解一些基本的概念。 作用域 作用域定义了变量和函数的可访问性。在Javascript中,作用域分为全局作用域和函数作用域。全局作用域是在整个程序中都可访问的作用域,而函数作用域只有在函数内部才能访问。 var关键字的作用域 使用var关键字声明的变量的作…

    JavaScript 2023年6月10日
    00
  • C#监测IPv4v6网速及流量的实例代码

    先给出完整的攻略目录,方便理清思路: 前置知识:C#网络库的使用 监测IPv4v6网速及流量的实现方法 示例1:监测本机流量并将数据保存至文件 示例2:通过Ping测试监测网络延迟 下面我就从这个目录入手,逐一给出详细的说明: 前置知识:C#网络库的使用 在监测网速和流量时,我们需要使用C#的网络库来进行网络通信相关操作。C#网络库主要包括Socket、We…

    JavaScript 2023年5月28日
    00
  • js 数组操作之pop,push,unshift,splice,shift

    JS数组操作之pop, push, unshift, splice, shift 在JavaScript编程中,数组是重要的数据结构之一。这里将讲解JS中常用的5种数组操作方法——pop, push, unshift, shift和 splice。 1. pop pop()方法是用于移除并返回数组中的最后一个元素。它会改变原始的数组。 语法: arr.pop…

    JavaScript 2023年5月27日
    00
  • jquery JSON的解析方式

    jQuery是一个功能强大的JavaScript库,其中包含了很多方便快捷的方法,其中解析JSON数据是jQuery的一个重点功能。 jQuery JSON解析方式 1. $.parseJSON() 使用$.parseJSON()函数可以将json字符串转换为JavaScript对象。该函数需要一个字符串参数并返回JavaScript对象。示例代码如下: l…

    JavaScript 2023年5月27日
    00
  • JavaScript函数防抖动debounce

    JavaScript函数防抖动Debounce是一种常用的前端性能优化方式,可以有效地减少频繁触发函数导致的性能问题。下面,我将详细讲解JavaScript函数防抖动Debounce的攻略,包括什么是函数防抖动、如何实现函数防抖动,以及函数防抖动的使用场景。 什么是函数防抖动? 在前端开发中,经常需要对页面元素进行事件绑定,例如监听窗口滚动事件、监听搜索框输…

    JavaScript 2023年6月10日
    00
  • uniapp跨页面传值uni.$emit和uni.$on的使用及踩坑实战

    uniapp 跨页面传值:uni.$emit 和 uni.$on 的使用 在一个完整的 uniapp 应用程序中,存在着多个页面组成的应用。有时候我们需要在不同的页面之间传递数据,这时候就要用到 uniapp 提供的跨页面传值方式 —— uni.$emit 和 uni.$on。 1. uni.$emit 和 uni.$on 概述 uni.$emit 和 un…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部