processAttrs() — vue Function Reference
Architecture documentation for the processAttrs() function in index.ts from the vue codebase.
Entity Profile
Dependency Diagram
graph TD a8b5582c_75a3_d739_c9b5_27e2ceb67bc3["processAttrs()"] 31f9edc3_10e5_9556_86c6_7c900b922f60["processElement()"] 31f9edc3_10e5_9556_86c6_7c900b922f60 -->|calls| a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 5940d769_1bd3_4c53_35fc_6968ebb6cb90["parseModifiers()"] a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 5940d769_1bd3_4c53_35fc_6968ebb6cb90 864d3348_97c0_ef1e_0722_64a34582d8e6["parseFilters()"] a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 864d3348_97c0_ef1e_0722_64a34582d8e6 447f7b2d_d677_800e_b42e_db97e7d830a7["camelize()"] a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 447f7b2d_d677_800e_b42e_db97e7d830a7 4f4016d4_c2a9_540e_d1fd_9dabe55a1d29["genAssignmentCode()"] a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 4f4016d4_c2a9_540e_d1fd_9dabe55a1d29 754feb41_b555_757e_313c_0f0096cdc970["addHandler()"] a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 754feb41_b555_757e_313c_0f0096cdc970 e667d00b_a47f_c88a_e931_82b5917dddc2["hyphenate()"] a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| e667d00b_a47f_c88a_e931_82b5917dddc2 4760a472_5347_3554_a7fe_3e7d21471a37["addProp()"] a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 4760a472_5347_3554_a7fe_3e7d21471a37 a5568283_0566_a9dd_887d_0985c4097fee["addAttr()"] a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| a5568283_0566_a9dd_887d_0985c4097fee c2fb6a46_dbd6_cdae_1536_1098e913cb08["addDirective()"] a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| c2fb6a46_dbd6_cdae_1536_1098e913cb08 0e2e0e33_ed3c_0f90_9245_4b781a654aec["checkForAliasModel()"] a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 0e2e0e33_ed3c_0f90_9245_4b781a654aec 98ee1e5f_4546_f8dd_b03c_1579380b057f["parseText()"] a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 98ee1e5f_4546_f8dd_b03c_1579380b057f style a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
src/compiler/parser/index.ts lines 773–920
function processAttrs(el) {
const list = el.attrsList
let i, l, name, rawName, value, modifiers, syncGen, isDynamic
for (i = 0, l = list.length; i < l; i++) {
name = rawName = list[i].name
value = list[i].value
if (dirRE.test(name)) {
// mark element as dynamic
el.hasBindings = true
// modifiers
modifiers = parseModifiers(name.replace(dirRE, ''))
// support .foo shorthand syntax for the .prop modifier
if (process.env.VBIND_PROP_SHORTHAND && propBindRE.test(name)) {
;(modifiers || (modifiers = {})).prop = true
name = `.` + name.slice(1).replace(modifierRE, '')
} else if (modifiers) {
name = name.replace(modifierRE, '')
}
if (bindRE.test(name)) {
// v-bind
name = name.replace(bindRE, '')
value = parseFilters(value)
isDynamic = dynamicArgRE.test(name)
if (isDynamic) {
name = name.slice(1, -1)
}
if (__DEV__ && value.trim().length === 0) {
warn(
`The value for a v-bind expression cannot be empty. Found in "v-bind:${name}"`
)
}
if (modifiers) {
if (modifiers.prop && !isDynamic) {
name = camelize(name)
if (name === 'innerHtml') name = 'innerHTML'
}
if (modifiers.camel && !isDynamic) {
name = camelize(name)
}
if (modifiers.sync) {
syncGen = genAssignmentCode(value, `$event`)
if (!isDynamic) {
addHandler(
el,
`update:${camelize(name)}`,
syncGen,
null,
false,
warn,
list[i]
)
if (hyphenate(name) !== camelize(name)) {
addHandler(
el,
`update:${hyphenate(name)}`,
syncGen,
null,
false,
warn,
list[i]
)
}
} else {
// handler w/ dynamic event name
addHandler(
el,
`"update:"+(${name})`,
syncGen,
null,
false,
warn,
list[i],
true // dynamic
)
}
}
}
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)
}
} else if (onRE.test(name)) {
// v-on
name = name.replace(onRE, '')
isDynamic = dynamicArgRE.test(name)
if (isDynamic) {
name = name.slice(1, -1)
}
addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic)
} else {
// normal directives
name = name.replace(dirRE, '')
// parse arg
const argMatch = name.match(argRE)
let arg = argMatch && argMatch[1]
isDynamic = false
if (arg) {
name = name.slice(0, -(arg.length + 1))
if (dynamicArgRE.test(arg)) {
arg = arg.slice(1, -1)
isDynamic = true
}
}
addDirective(
el,
name,
rawName,
value,
arg,
isDynamic,
modifiers,
list[i]
)
if (__DEV__ && name === 'model') {
checkForAliasModel(el, value)
}
}
} else {
// literal attribute
if (__DEV__) {
const res = parseText(value, delimiters)
if (res) {
warn(
`${name}="${value}": ` +
'Interpolation inside attributes has been removed. ' +
'Use v-bind or the colon shorthand instead. For example, ' +
'instead of <div id="{{ val }}">, use <div :id="val">.',
list[i]
)
}
}
addAttr(el, name, JSON.stringify(value), list[i])
// #6887 firefox doesn't update muted state if set via attribute
// even immediately after element creation
if (
!el.component &&
name === 'muted' &&
platformMustUseProp(el.tag, el.attrsMap.type, name)
) {
addProp(el, name, 'true', list[i])
}
}
}
}
Domain
Subdomains
Calls
Called By
Source
Frequently Asked Questions
What does processAttrs() do?
processAttrs() is a function in the vue codebase.
What does processAttrs() call?
processAttrs() calls 11 function(s): addAttr, addDirective, addHandler, addProp, camelize, checkForAliasModel, genAssignmentCode, hyphenate, and 3 more.
What calls processAttrs()?
processAttrs() is called by 1 function(s): processElement.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free