千家信息网

vue中attribute和property有什么区别

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍了vue中attribute和property有什么区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。作为 attri
千家信息网最后更新 2026年11月02日vue中attribute和property有什么区别

这篇文章主要介绍了vue中attribute和property有什么区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

作为 attribute 和 property 的 value 及 Vue.js 的相关处理

attribute 和 property 是 Web 开发中,比较容易混淆的概念,而对于 value,因其特殊性,更易困惑,本文尝试做一下梳理和例证

attribute 和 property 的概念

简单的说,attribute 是元素标签的属性,property 是元素对象的属性,例如:

  • input 的 value attribute 是通过标签里的 value="test value" 定义的,可以通过input.getAttribute('value') 获取,可以通过 input.setAttribute('value', 'New Value') 更新

  • input 的 value property 可通过 input.value 获取和更新,初始值是与 attribute 中的赋值一致的

attribute 和 property 的绑定

如果在最开始的时候,更新 attribute value 的值,property 的值也会随之改变

但是更新 property value 的值(在文本框输入或给 input.value 赋新值 ),attribute 的值不会随之改变,而且此时再更新 attribute 的值,property 的值也不再随之改变,如此动画所示,也可访问此页面尝试进行操作

这其实是脏值标记(dirty value flag)在起作用,dirty value flag 的初始值为 false,即 attribute value 的更新默认会改变对应的 property value,但是一旦用户交互修改了 property value,dirty value flag 的值就变为 true,即attribute value 的更新就不会改变对应的 property value 了

所以在实际项目中,我们一般都是在处理作为 property 的 value

Vue.js 对 value 的处理

一般情况使用 :value

Vue.js 的 v-bind,一般情况下是在处理 attribute,如果要作为 property 处理的话,需要加上 .prop

不过 v-bind:value 却大都默认为处理 property 值,因为被强制转化了,例如:

可见,Vue.js 将 value 作为 VNode 的 data 中的 domProps 的属性,而不是 attrs 的属性,所以挂载后会成为作为 property 的 value

在 Vue.js 源码中,强制转化 property 的处理如下:

// src/compiler/parser/index.jsfunction processAttrs (el) {...        if ((modifiers && modifiers.prop) || (          !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)        )) {          addProp(el, name, value, list[i], isDynamic)        } else {          addAttr(el, name, value, list[i], isDynamic)        }

其中 platformMustUseProp 在 web 平台的定义如下:

// src/platforms/web/util/attrs.jsconst acceptValue = makeMap('input,textarea,option,select,progress')export const mustUseProp = (tag: string, type: ?string, attr: string): boolean => {  return (    (attr === 'value' && acceptValue(tag)) && type !== 'button' ||    (attr === 'selected' && tag === 'option') ||    (attr === 'checked' && tag === 'input') ||    (attr === 'muted' && tag === 'video')  )}

由上可知,类型不为 button 的 input, textarea, option, select, progress 的 value 会强制作为 property,而不需要设置为 :value.prop

例如 textarea 标签,其本身其实并不支持 value attribute,所以以下代码中的 value 的值并不会显示在多行文本框中

但是在 Vue.js 中, 以下代码能成功绑定到 value property 并显示在多行文本框中

特殊情况使用 :value.prop

以上 Vue.js 源码需要注意的还有,强制作为 property, 还要满足 !el.component,即不为动态组件,因为动态组件的 el.component 的值为其 is attribute 的值

即动态组件的的 v-bind 默认都是作为 attribute的,如果要作为 property,就要使用 .prop,例如:

如果以上 component 中,删除 :value.prop 的 .prop,切换到 textarea 时,其值就不会显示在多行文本框中,可以在此页面点击切换标签查看。

感谢你能够认真阅读完这篇文章,希望小编分享的"vue中attribute和property有什么区别"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

处理 更新 属性 文本 标签 篇文章 强制 动态 情况 是在 组件 多行 特殊 代码 元素 可以通过 概念 源码 页面 切换 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 互联网科技官网 互联网金融 金融科技 致聘互联网科技 火传媒上海互联网科技 四川狮子座互联网科技 互联网金融和金融科技 银川新华互联网科技学校地址 深圳国际航运科技和互联网 互联网大会黑科技排名 广州恒生互联网科技有限 浙江互联网科技研学营 厦门千工互联网科技有限公司 燊美集互联网科技有限公司 众安科技工业互联网合作 上海科技产业互联网平台 银行科技岗属于互联网吗 21世纪互联网科技成就 互联网科技手机排行榜 易租星互联网科技有限公司 北京互联网科技公司 深圳艾佳互联网科技 中国互联网有什么科技含量 全球顶尖互联网科技公司 互联网金融中的现代科技 互联网科技公司有风险吗 民营互联网公司国防科技 广州富喜互联网络科技 抖集互联网科技技术咨询 互联网科技创业有什么好项目
0