* Runtime helper for merging v-bind="object" into a VNode's data. * 用于将v-bind="object"合并到VNode的数据中的运行时助手。 * 检查value 是否是对象,并且为value 添加update 事件
(data, //数据
tag, //vonde 节点
value, //value值
asProp, //prosp属性
isSync)
| 5547 | * 检查value 是否是对象,并且为value 添加update 事件 |
| 5548 | */ |
| 5549 | function bindObjectProps(data, //数据 |
| 5550 | tag, //vonde 节点 |
| 5551 | value, //value值 |
| 5552 | asProp, //prosp属性 |
| 5553 | isSync) { //是否 同步 |
| 5554 | if (value) { |
| 5555 | if (!isObject(value)) { //判断绑定值如果不是对象 |
| 5556 | "development" !== 'production' && warn( |
| 5557 | 'v-bind without argument expects an Object or Array value', |
| 5558 | this |
| 5559 | ); |
| 5560 | } else { |
| 5561 | if (Array.isArray(value)) { //判断值如果是数组 |
| 5562 | value = toObject(value); //转成对象 |
| 5563 | } |
| 5564 | var hash; |
| 5565 | var loop = function (key) { |
| 5566 | if ( |
| 5567 | key === 'class' || //如果key 是class |
| 5568 | key === 'style' || //获取是style |
| 5569 | isReservedAttribute(key) //或者是'key,ref,slot,slot-scope,is' |
| 5570 | ) { |
| 5571 | hash = data; |
| 5572 | } else { |
| 5573 | var type = data.attrs && data.attrs.type; //如果含有其他属性 或者 tyep |
| 5574 | |
| 5575 | /* mustUseProp |
| 5576 | * 1. attr === 'value', tag 必须是 'input,textarea,option,select,progress' 其中一个 type !== 'button' |
| 5577 | * 2. attr === 'selected' && tag === 'option' |
| 5578 | * 3. attr === 'checked' && tag === 'input' |
| 5579 | * 4. attr === 'muted' && tag === 'video' |
| 5580 | * 的情况下为真 |
| 5581 | * */ |
| 5582 | |
| 5583 | hash = asProp || config.mustUseProp(tag, type, key) ? |
| 5584 | data.domProps || (data.domProps = {}) : |
| 5585 | data.attrs || (data.attrs = {}); |
| 5586 | } |
| 5587 | if (!(key in hash)) { //如果数据和属性都没有这个key的时候,判断他应该是事件 |
| 5588 | hash[key] = value[key]; |
| 5589 | if (isSync) { //判断是否是同步 |
| 5590 | var on = data.on || (data.on = {}); |
| 5591 | on[("update:" + key)] = function ($event) { //更新数据事件 |
| 5592 | value[key] = $event; |
| 5593 | }; |
| 5594 | } |
| 5595 | } |
| 5596 | }; |
| 5597 | //循环 value中的所有key |
| 5598 | for (var key in value) { |
| 5599 | loop(key) |
| 5600 | } |
| 5601 | ; |
| 5602 | } |
| 5603 | } |
| 5604 | return data |
| 5605 | } |
| 5606 |