vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > ElementUI之model、v-model、prop

Vue2+ElementUI教程之model、v-model、prop详解

作者:邂逅星河浪漫

这篇文章主要介绍了Vue2+ElementUI教程之model、v-model、prop的相关资料,文中通过示例代码详细讲解了model数据绑定、v-model双向同步、prop校验映射三大核心语法,帮你彻底搞懂表单数据流与校验机制,需要的朋友可以参考下

一、示例代码

<!-- 1. :model 语法:el-form 表单绑定 -->
<el-form :rules="inputRules" :model="searchForm" ref="searchForm" ...>

  <!-- 2. prop 语法:el-form-item 表单校验绑定 -->
  <el-form-item label="起始日期" prop="startDate">
    <!-- 3. v-model 语法:el-date-picker 输入控件双向绑定 -->
    <el-date-picker v-model.trim="searchForm.startDate" ... />
  </el-form-item>

  <el-form-item label="结束日期" prop="endDate">
    <el-date-picker v-model.trim="searchForm.endDate" ... />
  </el-form-item>

</el-form>

这三个语法,是 Vue2 + Element UI 表单开发的黄金三角,缺一不可,各自承担完全不同的核心职责,下面逐个进行讲解。

二、详解一::model(v-bind:model)表单数据的根容器

1. 语法本质

:model 是 v-bind:model 的缩写,属于 Vue2 最基础的单向 Prop 绑定,核心是「数据从父级(页面)单向传递给子组件(el-form)」,子组件只能读取,不能直接修改。

2. 在代码里的作用

代码中 :model="searchForm" 是 Element UI el-form 组件的强制必填属性,作用是:

3. 代码的底层逻辑

data() 中定义了 searchForm: {...},el-form 通过 :model="searchForm" 拿到这个对象后,就会把内部所有 v-model 绑定的字段,都关联到这个对象上。

当你点击「查询」按钮时,最终发送给后端的请求参数,就是这个 searchForm 对象:

// 代码里的查询方法
search(title) {
  // ...
  let query = Object.assign(
    {
      pageIndex: (this.page - 1) * this.per_page,
      pageSize: this.per_page
    },
    this.searchForm // 这里就是 :model 绑定的数据源,直接作为接口参数
  )
  this.$axios({
    method: 'post',
    url: Api.PT1721,
    params: query
  })
  // ...
}

4. 核心特性

5. 关键小细节

那么如果Data()里的searchForm没有定义是空的呢?

例如:

data() {
  return {
    searchForm: {} // 空对象
  }
}

其实这样依旧可以绑定查询条件发送给后端,但是!!!

这根本原因是 虽然data 中只有空对象 searchForm: {},但 v-model 具有 「动态给对象添加属性并触发响应式」 的特殊能力,所以数据能收集到。

当你在页面输入内容或选择日期时,通过事件触发赋值:

// 伪代码
this.searchForm.startDate = '2026-04-06'

哪怕这个 startDate 属性在 data 里原本不存在,Vue 也会动态给 searchForm 增加这个属性,并且让它变成响应式的。所以数据确实能收集到,提交时也能发给后端。

虽然 数据收集(v-model) 能工作,但 表单校验(rules) 是绝对会失效的。

searchForm: {}会出现的问题

------------- 问题1

假设你有一个编辑 / 回显的场景,需要后端返回数据填充表单:

// 后端返回的数据
const res = { endDate: "2026-04-10" }

// 直接赋值
this.searchForm = res

如果你的 data 里定义了 searchForm: { endDate: '' },没问题。

但如果你的 data 里是 searchForm: {},且你是靠 v-model 动态加字段:

------------- 问题2

下次查询时候还会携带之前的查询条件

比如你上次搜了 “张三”,这次不输入,点查询 → 依然带着 userName=张三

只要data 里的searchForm没有你输入的字段,Vue 响应式系统监听不到这种动态属性的删除

推荐正规写法

1. data 里必须初始化所有字段

data() {
  return {
    searchForm: {
      userName: '',
      phone: '',
      status: '',
      startDate: '',
      endDate: ''
      // 所有用到的字段都写出来
    }
  }
}

2. 重置方法必须这样写

reset() {
  // 直接重置为初始状态
  this.searchForm = {
    userName: '',
    phone: '',
    status: '',
    startDate: '',
    endDate: ''
  }
}

三、详解二:v-model —— 输入控件的「双向同步器」

1. 语法本质

v-model 是 Vue2 内置的双向绑定语法糖,底层等价于 :value="数据" + @input="数据=$event.target.value",自动实现「数据更新 → 视图刷新,视图输入 → 数据同步」,无需手动监听事件。

在 Element UI 组件中,v-model 被封装为 :value + @change,适配日期选择器、下拉框等组件的输入逻辑。

2. 代码里的作用

代码中 v-model.trim="searchForm.startDate" / v-model.trim="searchForm.endDate",是 el-date-picker 日期选择器的核心绑定属性,作用是:

3. 代码的底层逻辑

el-input加.trim 修饰符,作用是自动去除输入值的首尾空格。

v-model 绑定的 searchForm.startDate,和 el-form :model="searchForm" 是同一个对象,这就实现了「输入控件 → 表单容器 → 接口参数」的完整数据链路:用户选择日期 → v-model 自动同步到 searchForm → el-form 读取 searchForm 做校验 → search() 方法把 searchForm 作为参数发送给后端

4. 核心特性

5. 业务场景总结

四、详解三:prop —— 表单校验的「规则映射器」

1. 语法本质

prop 是 Element UI el-form-item 组件的专属属性,本质是「表单校验规则的映射字段」,作用是把 el-form-item 和 :model 绑定的对象中的某个字段、rules 中的某条校验规则,三者关联起来。

2. 代码里的作用

代码中 prop="startDate" / prop="endDate",是 el-form-item 的校验绑定属性,作用是:

3. 代码的底层逻辑

在 data() 中定义了校验规则:

inputRules: {
  startDate: [
    { required: true, message: '起始日期不能为空', trigger: 'blur' }
  ],
  endDate: [
    { required: true, message: '结束日期不能为空', trigger: 'blur' }
  ]
}

当你给 el-form-item 写 prop="startDate" 时,el-form 就会自动做三件事:

如果不写 prop 属性,el-form 就无法找到对应的字段和规则,表单校验会完全失效,这是 Element UI 表单校验的核心要求。

4. 核心特性

5. 业务场景总结

五、三者核心区别

对比维度:model(v-bind:model)v-modelprop
语法本质单向 Prop 绑定(v-bind 缩写)双向绑定语法糖el-form-item 专属校验映射属性
绑定对象el-form 表单组件输入控件(el-date-picker/el-input 等)el-form-item 表单项组件
核心作用表单数据根容器,承载所有接口参数输入控件双向同步,收集用户输入校验规则映射,让表单校验生效
数据流向页面 → el-form(单向只读)输入控件 ↔ searchForm(双向自动同步)无数据传递,仅做规则映射
代码中的位置<el-form :model="searchForm"><el-date-picker v-model="searchForm.startDate"><el-form-item prop="startDate">
接口请求作用存储最终发送的请求参数同步用户输入,保证参数最新校验输入合法性,过滤无效请求
是否必填el-form 必写,否则表单无数据源输入控件必写,否则无法收集输入有校验需求必写,否则校验失效
依赖关系是 v-model、prop 的数据基础依赖 :model 绑定的对象依赖 :model 和 rules 校验规则
底层原理v-bind 单向传值:value + @input(语法糖)字段 - 规则 - 表单项的映射关联

六、三者协同工作的完整链路

我们用「日期查询表单」,完整走一遍三者的协作流程:

步骤 1:页面初始化

步骤 2:用户操作(选择日期)

步骤 3:点击「查询」按钮,发送接口请求

步骤 4:点击「重置」按钮

总结 

到此这篇关于Vue2+ElementUI教程之model、v-model、prop详解的文章就介绍到这了,更多相关ElementUI之model、v-model、prop内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文