Evan You 10 лет назад
Родитель
Сommit
bcc1770a65

+ 1 - 3
src/compiler/compile-props.js

@@ -97,9 +97,7 @@ module.exports = function compileProps (el, propOptions) {
           'Prop "' + name + '" expects a two-way binding type.'
         )
       }
-    /* eslint-disable no-cond-assign */
-    } else if (value = _.attr(el, attr)) {
-    /* eslint-enable no-cond-assign */
+    } else if ((value = _.attr(el, attr)) !== null) {
       // has literal binding!
       prop.raw = value
     } else if (options.required) {

+ 4 - 0
test/unit/specs/compiler/compile_spec.js

@@ -241,6 +241,7 @@ if (_.inBrowser) {
       var props = {
         testNormal: null,
         testLiteral: null,
+        testBoolean: { type: Boolean },
         testTwoWay: null,
         twoWayWarn: null,
         testOneTime: null,
@@ -250,6 +251,7 @@ if (_.inBrowser) {
       el.innerHTML = '<div ' +
         'v-bind:test-normal="a" ' +
         'test-literal="1" ' +
+        'test-boolean ' +
         ':optimize-literal="1" ' +
         ':optimize-literal-str="\'true\'"' +
         ':test-two-way.sync="a" ' +
@@ -260,6 +262,8 @@ if (_.inBrowser) {
       // literal
       expect(vm.testLiteral).toBe('1')
       expect(vm._data.testLiteral).toBe('1')
+      expect(vm.testBoolean).toBe(true)
+      expect(vm._data.testBoolean).toBe(true)
       expect(vm.optimizeLiteral).toBe(1)
       expect(vm._data.optimizeLiteral).toBe(1)
       expect(vm.optimizeLiteralStr).toBe('true')

+ 17 - 0
test/unit/specs/directives/internal/prop_spec.js

@@ -574,5 +574,22 @@ if (_.inBrowser) {
         done()
       })
     })
+
+    it('treat boolean props properly', function () {
+      var vm = new Vue({
+        el: el,
+        template: '<comp v-ref:child prop-a></comp>',
+        components: {
+          comp: {
+            props: {
+              propA: Boolean,
+              propB: Boolean
+            }
+          }
+        }
+      })
+      expect(vm.$refs.child.propA).toBe(true)
+      expect(vm.$refs.child.propB).toBe(false)
+    })
   })
 }