From 3507eb8ea36e87b87c474ebd61d03c4449dcc71d Mon Sep 17 00:00:00 2001 From: kingwl <805037171@163.com> Date: Mon, 20 Mar 2017 13:44:27 +0800 Subject: [PATCH] fix provide isn't reactive with a single array - Fix #5223 --- src/core/instance/inject.js | 3 +- test/unit/features/options/inject.spec.js | 34 +++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/core/instance/inject.js b/src/core/instance/inject.js index 0b1a071e3c4..89a98ab49fb 100644 --- a/src/core/instance/inject.js +++ b/src/core/instance/inject.js @@ -1,6 +1,7 @@ /* @flow */ import { hasSymbol } from 'core/util/env' +import { defineReactive } from '../observer/index' export function initProvide (vm: Component) { const provide = vm.$options.provide @@ -29,7 +30,7 @@ export function initInjections (vm: Component) { let source = vm while (source) { if (source._provided && provideKey in source._provided) { - vm[key] = source._provided[provideKey] + defineReactive(vm, key, source._provided[provideKey]) break } source = source.$parent diff --git a/test/unit/features/options/inject.spec.js b/test/unit/features/options/inject.spec.js index ac67749f43d..86c03717e30 100644 --- a/test/unit/features/options/inject.spec.js +++ b/test/unit/features/options/inject.spec.js @@ -162,4 +162,38 @@ describe('Options provide/inject', () => { expect(vm.$el.textContent).toBe('123') }) } + + // Github issue #5223 + it('should work with reactive array', done => { + const vm = new Vue({ + template: `