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

Function updateStyle

vue.js:10780–10830  ·  view source on GitHub ↗
(oldVnode, vnode)

Source from the content-addressed store, hash-verified

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,

Callers

nothing calls this directly

Calls 6

isUndefFunction · 0.85
normalizeStyleBindingFunction · 0.85
isDefFunction · 0.85
extendFunction · 0.85
getStyleFunction · 0.85
setPropFunction · 0.85

Tested by

no test coverage detected