Evan You 10 سال پیش
والد
کامیت
7f7040c156
2فایلهای تغییر یافته به همراه44 افزوده شده و 49 حذف شده
  1. 26 1
      src/runtime/instance/lifecycle.js
  2. 18 48
      src/runtime/instance/render.js

+ 26 - 1
src/runtime/instance/lifecycle.js

@@ -1,5 +1,7 @@
 import Watcher from '../observer/watcher'
-import { query, toArray, warn } from '../util/index'
+import { query, toArray, warn, validateProp } from '../util/index'
+import { observerState } from '../observer/index'
+import { updateListeners } from '../vdom/helpers'
 
 export function initLifecycle (vm) {
   const options = vm.$options
@@ -76,6 +78,29 @@ export function lifecycleMixin (Vue) {
     }
   }
 
+  Vue.prototype._updateFromParent = function (propsData, listeners, parentVnode, children) {
+    this.$options._parentVnode = parentVnode
+    this.$options._renderChildren = children
+    // update props
+    if (propsData && this.$options.props) {
+      observerState.shouldConvert = false
+      const propKeys = this.$options.propKeys
+      for (let i = 0; i < propKeys.length; i++) {
+        let key = propKeys[i]
+        this[key] = validateProp(this, key, propsData)
+      }
+      observerState.shouldConvert = true
+    }
+    // update listeners
+    if (listeners) {
+      const oldListeners = this.$options._parentListeners
+      this.$options._parentListeners = listeners
+      updateListeners(listeners, oldListeners || {}, (event, handler) => {
+        this.$on(event, handler)
+      })
+    }
+  }
+
   Vue.prototype.$forceUpdate = function () {
     this._watcher.update()
   }

+ 18 - 48
src/runtime/instance/render.js

@@ -1,13 +1,6 @@
-import { observerState } from '../observer/index'
 import createElement from '../vdom/create-element'
-import { flatten, updateListeners } from '../vdom/helpers'
-import {
-  bind,
-  resolveAsset,
-  isArray,
-  isObject,
-  validateProp
-} from '../util/index'
+import { flatten } from '../vdom/helpers'
+import { bind, resolveAsset, isArray, isObject } from '../util/index'
 
 export const renderState = {
   activeInstance: null
@@ -26,6 +19,22 @@ export function initRender (vm) {
 }
 
 export function renderMixin (Vue) {
+  Vue.prototype._render = function () {
+    const prev = renderState.activeInstance
+    renderState.activeInstance = this
+    const { render, _renderChildren } = this.$options
+    // resolve slots. becaues slots are rendered in parent scope,
+    // we set the activeInstance to parent.
+    if (_renderChildren) {
+      resolveSlots(this, _renderChildren)
+    }
+    // render self
+    const vnode = render.call(this._renderProxy)
+    // restore render state
+    renderState.activeInstance = prev
+    return vnode
+  }
+
   // shorthands used in render functions
   Vue.prototype.__h__ = createElement
 
@@ -95,45 +104,6 @@ export function renderMixin (Vue) {
       }
     }
   }
-
-  Vue.prototype._updateFromParent = function (propsData, listeners, parentVnode, children) {
-    this.$options._parentVnode = parentVnode
-    this.$options._renderChildren = children
-    // update props
-    if (propsData && this.$options.props) {
-      observerState.shouldConvert = false
-      const propKeys = this.$options.propKeys
-      for (let i = 0; i < propKeys.length; i++) {
-        let key = propKeys[i]
-        this[key] = validateProp(this, key, propsData)
-      }
-      observerState.shouldConvert = true
-    }
-    // update listeners
-    if (listeners) {
-      const oldListeners = this.$options._parentListeners
-      this.$options._parentListeners = listeners
-      updateListeners(listeners, oldListeners || {}, (event, handler) => {
-        this.$on(event, handler)
-      })
-    }
-  }
-
-  Vue.prototype._render = function () {
-    const prev = renderState.activeInstance
-    renderState.activeInstance = this
-    const { render, _renderChildren } = this.$options
-    // resolve slots. becaues slots are rendered in parent scope,
-    // we set the activeInstance to parent.
-    if (_renderChildren) {
-      resolveSlots(this, _renderChildren)
-    }
-    // render self
-    const vnode = render.call(this._renderProxy)
-    // restore render state
-    renderState.activeInstance = prev
-    return vnode
-  }
 }
 
 function resolveSlots (vm, children) {