(vnode, isRemoval)
| 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 |
no test coverage detected