From c60fb7f3882310afe7b7fcee3f4f99ff1255ca4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=99=9E=E4=B8=8A=E5=B0=86?= Date: Tue, 20 Nov 2018 17:16:28 +0800 Subject: [PATCH 1/5] fix #9046 --- src/core/observer/dep.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/observer/dep.js b/src/core/observer/dep.js index 1dd37783490..0f7f0a60264 100644 --- a/src/core/observer/dep.js +++ b/src/core/observer/dep.js @@ -56,7 +56,7 @@ Dep.target = null const targetStack = [] export function pushTarget (_target: ?Watcher) { - if (Dep.target) targetStack.push(Dep.target) + if (Dep.target !== null) targetStack.push(Dep.target) Dep.target = _target } From c7f62a25457f75d8c3ff110284ad15f54270dace Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=99=9E=E4=B8=8A=E5=B0=86?= Date: Wed, 21 Nov 2018 10:05:26 +0800 Subject: [PATCH 2/5] add test --- .../instance/methods-lifecycle.spec.js | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/test/unit/features/instance/methods-lifecycle.spec.js b/test/unit/features/instance/methods-lifecycle.spec.js index 71525be2f0b..1e424a5c9be 100644 --- a/test/unit/features/instance/methods-lifecycle.spec.js +++ b/test/unit/features/instance/methods-lifecycle.spec.js @@ -1,4 +1,5 @@ import Vue from 'vue' +import Dep from 'core/observer/dep' describe('Instance methods lifecycle', () => { describe('$mount', () => { @@ -32,6 +33,26 @@ describe('Instance methods lifecycle', () => { expect(vm.$el.tagName).toBe('DIV') expect(vm.$el.textContent).toBe('hi') }) + + it('Dep.target should be undefined in lifecycle', () => { + const vm = new Vue({ + template: '
', + components: { + myComponent: { + template: '
hi
', + mounted () { + const _msg = this.msg + expect(Dep.target).toBe(undefined) + }, + computed: { + msg () { + return 1 + } + } + } + } + }).$mount() + }) }) describe('$destroy', () => { From 619d7a3de71a53bf7b839dbb3ee12bdba2175736 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=99=9E=E4=B8=8A=E5=B0=86?= Date: Fri, 23 Nov 2018 09:49:55 +0800 Subject: [PATCH 3/5] reset Dep.target --- src/core/observer/dep.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/observer/dep.js b/src/core/observer/dep.js index 0f7f0a60264..6c23081fc95 100644 --- a/src/core/observer/dep.js +++ b/src/core/observer/dep.js @@ -54,12 +54,12 @@ export default class Dep { // watcher being evaluated at any time. Dep.target = null const targetStack = [] - +window.Dep = Dep export function pushTarget (_target: ?Watcher) { if (Dep.target !== null) targetStack.push(Dep.target) Dep.target = _target } export function popTarget () { - Dep.target = targetStack.pop() + Dep.target = targetStack.pop() || null } From bf7bff00c728a7e38425b7cf7cbe9eb65ba9c29b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=99=9E=E4=B8=8A=E5=B0=86?= Date: Fri, 23 Nov 2018 09:59:16 +0800 Subject: [PATCH 4/5] reset Dep.target --- src/core/observer/dep.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core/observer/dep.js b/src/core/observer/dep.js index 6c23081fc95..a81b4ec1aab 100644 --- a/src/core/observer/dep.js +++ b/src/core/observer/dep.js @@ -54,12 +54,15 @@ export default class Dep { // watcher being evaluated at any time. Dep.target = null const targetStack = [] -window.Dep = Dep export function pushTarget (_target: ?Watcher) { if (Dep.target !== null) targetStack.push(Dep.target) Dep.target = _target } export function popTarget () { - Dep.target = targetStack.pop() || null + if (targetStack.length) { + Dep.target = targetStack.pop() + } else { + Dep.target = null + } } From e636a3686360c331be35bd1bcd5ae5f70da62e84 Mon Sep 17 00:00:00 2001 From: Evan You Date: Sat, 1 Dec 2018 00:22:07 -0500 Subject: [PATCH 5/5] Update dep.js --- src/core/observer/dep.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/core/observer/dep.js b/src/core/observer/dep.js index a81b4ec1aab..d344aff9445 100644 --- a/src/core/observer/dep.js +++ b/src/core/observer/dep.js @@ -54,15 +54,13 @@ export default class Dep { // watcher being evaluated at any time. Dep.target = null const targetStack = [] -export function pushTarget (_target: ?Watcher) { - if (Dep.target !== null) targetStack.push(Dep.target) - Dep.target = _target + +export function pushTarget (target: ?Watcher) { + targetStack.push(target) + Dep.target = target } export function popTarget () { - if (targetStack.length) { - Dep.target = targetStack.pop() - } else { - Dep.target = null - } + targetStack.pop() + Dep.target = targetStack[targetStack.length - 1] }