MCPcopy Create free account
hub / github.com/ygs-code/vue / bindObjectProps

Function bindObjectProps

vue.js:5549–5605  ·  view source on GitHub ↗

* 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)

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 3

isObjectFunction · 0.85
toObjectFunction · 0.85
loopFunction · 0.85

Tested by

no test coverage detected