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

Function registerRef

vue.js:7834–7861  ·  view source on GitHub ↗
(vnode, isRemoval)

Source from the content-addressed store, hash-verified

7832 }
7833 //注册ref或者删除ref。比如标签上面设置了ref='abc' 那么该函数就是为this.$refs.abc 注册ref 把真实的dom存进去
7834 function registerRef(vnode, isRemoval) {
7835 var key = vnode.data.ref; //获取vond ref的字符串
7836 if (!isDef(key)) { //如果没有定义则不执行下面的代码了
7837 return
7838 }
7839
7840 var vm = vnode.context; //vm 上下文
7841 var ref = vnode.componentInstance || vnode.elm; //组件实例 或者 elm DOM 节点
7842 var refs = vm.$refs; //获取vm总共的refs
7843 if (isRemoval) { //标志是否删除ref
7844 if (Array.isArray(refs[key])) { //如果定义有多个同名的ref 则会定义为一个数组,删除refs 这个key 定义的数组
7845 remove(refs[key], ref); //删除ref
7846 } else if (refs[key] === ref) { //如果是单个的时候
7847 refs[key] = undefined; //直接置空
7848 }
7849 } else {
7850 if (vnode.data.refInFor) { //如果ref和for一起使用的时候
7851 if (!Array.isArray(refs[key])) { //refs[key] 不是数组 则变成一个数组
7852 refs[key] = [ref];
7853 } else if (refs[key].indexOf(ref) < 0) { //如果ref 不存在 refs的时候则添加进去
7854 // $flow-disable-line
7855 refs[key].push(ref);
7856 }
7857 } else {
7858 refs[key] = ref; //如果是单个直接赋值
7859 }
7860 }
7861 }
7862
7863 /**
7864 * Virtual DOM patching algorithm based on Snabbdom by

Callers 3

vue.jsFile · 0.85
initComponentFunction · 0.85
createPatchFunctionFunction · 0.85

Calls 2

isDefFunction · 0.85
removeFunction · 0.85

Tested by

no test coverage detected