MCPcopy Index your code
hub / github.com/ygs-code/vue / processAttrs

Function processAttrs

vue.js:13796–13961  ·  view source on GitHub ↗
(el)

Source from the content-addressed store, hash-verified

13794 }
13795 //检查属性,为虚拟dom属性转换成对应需要的虚拟dom vonde数据 为el虚拟dom 添加muted, events,nativeEvents,directives
13796 function processAttrs(el) {
13797 var list = el.attrsList; //获取属性列表
13798 var i, //循环数组的索引
13799 l, //属性数组长度
13800 name, //获取 view 属性的名称
13801 rawName,//获取 view 属性的名称
13802 value, //属性名
13803 modifiers,
13804 isProp; //是否是props 属性
13805
13806 for (i = 0, l = list.length; i < l; i++) { //循环属性列表
13807 name = rawName = list[i].name; //获取 view 属性的名称
13808 value = list[i].value; //获取属性的值
13809
13810 if (dirRE.test(name)) { // 判断是否是 v-或者@或者: 属性开头的
13811 // mark element as dynamic
13812 el.hasBindings = true; // 动态标记元素
13813 // modifiers 编辑器 //把字符串中的对象拆分成 对象比如 data.object.info.age 变成对象{object:true,info:true,age:true} 返回出去
13814 modifiers = parseModifiers(name);
13815 if (modifiers) {
13816 //把刚才后面的.+字符串去除掉 获取最后一位的key
13817 name = name.replace(modifierRE, '');
13818 }
13819 if (bindRE.test(name)) { // v-bind 匹配开始匹配是 :或者是v-bind
13820
13821 name = name.replace(bindRE, ''); //去除 开始匹配是 :或者是v-bind
13822 // 处理value 解析成正确的value,把过滤器 转换成vue 虚拟dom的解析方法函数 比如把过滤器 ' ab | c | d' 转换成 _f("d")(_f("c")(ab))
13823 // 表达式中的过滤器解析方法
13824 value = parseFilters(value);
13825 isProp = false;
13826 if (modifiers) { //匹配到对象点的时候
13827 if (modifiers.prop) {//匹配到有prop属性的时候
13828 isProp = true;
13829 //属性 v-model 变成 vModel
13830 name = camelize(name);
13831 //如果是innerHtml属性变成innerHTML
13832 if (name === 'innerHtml') {
13833 name = 'innerHTML';
13834 }
13835 }
13836 if (modifiers.camel) {
13837 name = camelize(name);
13838 }
13839 if (modifiers.sync) { //同步属性
13840
13841 //为虚拟dom添加events 事件对象属性,如果添加@click='clickEvent' 则此时 虚拟dom为el.events.click.value="clickEvent"
13842 //或者虚拟dom添加nativeEvents 事件对象属性,如果添加@click.native='clickEvent' 则此时 虚拟dom为el.nativeEvents.click.value="clickEvent"
13843 addHandler(
13844 el,
13845 ("update:" + (camelize(name))), // //属性 v-model 变成 vModel
13846 //创建赋值代码
13847 // 创赋值代码,子功能转义字符串对象拆分字符串对象 把后一位key分离出来
13848 genAssignmentCode( //返回值 函数
13849 value, //对象
13850 "$event" //key
13851 )
13852 );
13853 }

Callers 1

processElementFunction · 0.85

Calls 9

parseModifiersFunction · 0.85
parseFiltersFunction · 0.85
addHandlerFunction · 0.85
genAssignmentCodeFunction · 0.85
addPropFunction · 0.85
addAttrFunction · 0.85
addDirectiveFunction · 0.85
checkForAliasModelFunction · 0.85
parseTextFunction · 0.85

Tested by

no test coverage detected