Evan You 9 лет назад
Родитель
Сommit
86bf3da18e

+ 2 - 2
src/platforms/web/runtime/directives/show.js

@@ -11,7 +11,7 @@ function locateNode (vnode: VNode): VNodeWithData {
 }
 
 export default {
-  bind (el: HTMLElement, { value }: VNodeDirective, vnode: VNodeWithData) {
+  bind (el: any, { value }: VNodeDirective, vnode: VNodeWithData) {
     vnode = locateNode(vnode)
     const transition = vnode.data && vnode.data.transition
     if (value && transition && transition.appear && !isIE9) {
@@ -21,7 +21,7 @@ export default {
     el.style.display = value ? originalDisplay : 'none'
     el.__vOriginalDisplay = originalDisplay
   },
-  update (el: HTMLElement, { value, oldValue }: VNodeDirective, vnode: VNodeWithData) {
+  update (el: any, { value, oldValue }: VNodeDirective, vnode: VNodeWithData) {
     /* istanbul ignore if */
     if (value === oldValue) return
     vnode = locateNode(vnode)

+ 8 - 1
test/unit/features/directives/show.spec.js

@@ -50,11 +50,18 @@ describe('Directive v-show', () => {
     }).then(done)
   })
 
-  it('should respect display value in style attribute', () => {
+  it('should respect display value in style attribute', done => {
     const vm = new Vue({
       template: '<div><span v-show="foo" style="display:block">hello</span></div>',
       data: { foo: true }
     }).$mount()
     expect(vm.$el.firstChild.style.display).toBe('block')
+    vm.foo = false
+    waitForUpdate(() => {
+      expect(vm.$el.firstChild.style.display).toBe('none')
+      vm.foo = true
+    }).then(() => {
+      expect(vm.$el.firstChild.style.display).toBe('block')
+    }).then(done)
   })
 })