| 10778 | }); |
| 10779 | // 将vonde虚拟dom的css 转义成并且渲染到真实dom的csszhong |
| 10780 | function updateStyle(oldVnode, vnode) { |
| 10781 | var data = vnode.data; //获取新虚拟dom的标签属性 |
| 10782 | var oldData = oldVnode.data; //获取旧虚拟dom的标签属性 |
| 10783 | |
| 10784 | if (isUndef(data.staticStyle) && isUndef(data.style) && |
| 10785 | isUndef(oldData.staticStyle) && isUndef(oldData.style) |
| 10786 | ) { |
| 10787 | return |
| 10788 | } |
| 10789 | |
| 10790 | var cur, name; |
| 10791 | var el = vnode.elm; //获取真实的dom |
| 10792 | var oldStaticStyle = oldData.staticStyle; //获取旧的静态 staticStyle |
| 10793 | var oldStyleBinding = oldData.normalizedStyle || oldData.style || {}; //获取旧的动态style |
| 10794 | |
| 10795 | // if static style exists, stylebinding already merged into it when doing normalizeStyleData |
| 10796 | // 如果存在静态样式,则在执行normalizeStyleData时,stylebinding已经合并到其中 |
| 10797 | var oldStyle = oldStaticStyle || oldStyleBinding; //旧的style样式 |
| 10798 | |
| 10799 | |
| 10800 | //将可能的数组/字符串值规范化为对象 //把style 字符串 转换成对象 比如'width:100px;height:200px;' 转化成 {width:100px,height:200px} |
| 10801 | var style = normalizeStyleBinding(vnode.data.style) || {}; |
| 10802 | |
| 10803 | // store normalized style under a different key for next diff |
| 10804 | // make sure to clone it if it's reactive, since the user likely wants |
| 10805 | // to mutate it. |
| 10806 | //为下一个diff在不同的键下存储规范化样式 |
| 10807 | //如果它是反应性的,请确保克隆它,因为用户可能希望这样做 |
| 10808 | //使之变异 |
| 10809 | vnode.data.normalizedStyle = isDef(style.__ob__) ? //如果style 加入了观察者之后 |
| 10810 | extend({}, style) : //重新克隆,可以修改 |
| 10811 | style; //直接赋值 |
| 10812 | //getStyle循环子组件和组件的样式,把它全部合并到一个样式对象中返回 样式对象 如{width:100px,height:200px} 返回该字符串。 |
| 10813 | var newStyle = getStyle( |
| 10814 | vnode, |
| 10815 | true |
| 10816 | ); |
| 10817 | |
| 10818 | for (name in oldStyle) { //获取旧虚拟dom的样式 |
| 10819 | if (isUndef(newStyle[name])) { // 如果新的虚拟dom vonde没有了 |
| 10820 | setProp(el, name, ''); //则设置样式为空 |
| 10821 | } |
| 10822 | } |
| 10823 | for (name in newStyle) { //循环新的虚拟dom vonde 样式 |
| 10824 | cur = newStyle[name]; |
| 10825 | if (cur !== oldStyle[name]) { //如果旧的和新的不同了 就设置新的样式 |
| 10826 | // ie9 setting to null has no effect, must use empty string |
| 10827 | setProp(el, name, cur == null ? '' : cur); |
| 10828 | } |
| 10829 | } |
| 10830 | } |
| 10831 | |
| 10832 | var style = { |
| 10833 | create: updateStyle, |