Browse Source

fix functional context resolving merge errors

Evan You 9 years ago
parent
commit
7d3c883f83

+ 1 - 13
src/core/instance/inject.js

@@ -51,19 +51,7 @@ export function resolveInject (inject: any, vm: Component): ?Object {
       let source = vm
       while (source) {
         if (source._provided && provideKey in source._provided) {
-          /* istanbul ignore else */
-          if (process.env.NODE_ENV !== 'production') {
-            defineReactive(vm, key, source._provided[provideKey], () => {
-              warn(
-                `Avoid mutating an injected value directly since the changes will be ` +
-                `overwritten whenever the provided component re-renders. ` +
-                `injection being mutated: "${key}"`,
-                vm
-              )
-            })
-          } else {
-            defineReactive(vm, key, source._provided[provideKey])
-          }
+          result[key] = source._provided[provideKey]
           break
         }
         source = source.$parent

+ 0 - 1
src/core/vdom/create-component.js

@@ -1,7 +1,6 @@
 /* @flow */
 
 import VNode from './vnode'
-import { resolveInject } from '../instance/inject'
 import { resolveConstructorOptions } from '../instance/init'
 import { createFunctionalComponent } from './create-functional-component'
 

+ 5 - 3
src/core/vdom/create-functional-component.js

@@ -2,6 +2,7 @@
 
 import VNode from './vnode'
 import { createElement } from './create-element'
+import { resolveInject } from '../instance/inject'
 import { resolveSlots } from '../instance/render-helpers/resolve-slots'
 
 import {
@@ -32,11 +33,12 @@ export function createFunctionalComponent (
   const _context = Object.create(context)
   const h = (a, b, c, d) => createElement(_context, a, b, c, d, true)
   const vnode = Ctor.options.render.call(null, h, {
-    props,
-    listeners: data.on || {},
     data,
-    parent: context,
+    props,
     children,
+    parent: context,
+    listeners: data.on || {},
+    injections: resolveInject(Ctor.options.inject, context),
     slots: () => resolveSlots(children, context)
   })
   if (vnode instanceof VNode) {