processAttrs() — vue Function Reference
Architecture documentation for the processAttrs() function in index.ts from the vue codebase.
Entity Profile
Dependency Diagram
graph TD 6f72c0fc_c9ca_496b_1bc7_d93b516eda63["processAttrs()"] 02a69150_0003_c070_7030_ea511121f64b["processElement()"] 02a69150_0003_c070_7030_ea511121f64b -->|calls| 6f72c0fc_c9ca_496b_1bc7_d93b516eda63 cd39a571_e3cd_e6f0_cc58_0eb0062f0b59["parseModifiers()"] 6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| cd39a571_e3cd_e6f0_cc58_0eb0062f0b59 e82e0ef9_225b_c510_670f_d4553c00a84c["parseFilters()"] 6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| e82e0ef9_225b_c510_670f_d4553c00a84c 836e9c36_fe18_c1c8_9715_d916891f0517["camelize()"] 6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| 836e9c36_fe18_c1c8_9715_d916891f0517 36fcfc37_216e_9f34_5a69_e976b9f178f6["genAssignmentCode()"] 6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| 36fcfc37_216e_9f34_5a69_e976b9f178f6 5f7b1ed1_7106_20e8_83d2_d329e3f4a814["addHandler()"] 6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| 5f7b1ed1_7106_20e8_83d2_d329e3f4a814 e78b8b23_1803_b152_f10f_06b6c4015dc9["hyphenate()"] 6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| e78b8b23_1803_b152_f10f_06b6c4015dc9 4daec7f5_cb46_f8e0_ce45_d7c464826c5d["addProp()"] 6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| 4daec7f5_cb46_f8e0_ce45_d7c464826c5d c66bf8fe_579b_d9ec_aef1_172b5cabedf3["addAttr()"] 6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| c66bf8fe_579b_d9ec_aef1_172b5cabedf3 0d580c5a_94a5_1668_70d1_6bf40da1b73a["addDirective()"] 6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| 0d580c5a_94a5_1668_70d1_6bf40da1b73a fb909a99_f08a_b61e_92c2_2abd48c2ed27["checkForAliasModel()"] 6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| fb909a99_f08a_b61e_92c2_2abd48c2ed27 0a22351a_c237_f9ca_df3f_a6e82bad69d8["parseText()"] 6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| 0a22351a_c237_f9ca_df3f_a6e82bad69d8 style 6f72c0fc_c9ca_496b_1bc7_d93b516eda63 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