Просмотр исходного кода

support boolean props in the form of a="a"

Evan You 10 лет назад
Родитель
Сommit
c915cf424a
2 измененных файлов с 12 добавлено и 6 удалено
  1. 7 3
      src/compiler/compile-props.js
  2. 5 3
      test/unit/specs/directives/internal/prop_spec.js

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

@@ -197,9 +197,13 @@ function makePropsLinkFn (props) {
         initProp(vm, prop, value)
       } else {
         // string literal, but we need to cater for
-        // Boolean props with no value
-        value = options.type === Boolean && raw === ''
-          ? true
+        // Boolean props with no value, or with same
+        // literal value (e.g. disabled="disabled")
+        // see https://github.com/vuejs/vue-loader/issues/182
+        value = (
+          options.type === Boolean &&
+          (raw === '' || raw === hyphenate(prop.name))
+        ) ? true
           : raw
         initProp(vm, prop, value)
       }

+ 5 - 3
test/unit/specs/directives/internal/prop_spec.js

@@ -626,18 +626,20 @@ describe('prop', function () {
   it('treat boolean props properly', function () {
     var vm = new Vue({
       el: el,
-      template: '<comp v-ref:child prop-a></comp>',
+      template: '<comp v-ref:child prop-a prop-b="prop-b"></comp>',
       components: {
         comp: {
           props: {
             propA: Boolean,
-            propB: Boolean
+            propB: Boolean,
+            propC: Boolean
           }
         }
       }
     })
     expect(vm.$refs.child.propA).toBe(true)
-    expect(vm.$refs.child.propB).toBe(false)
+    expect(vm.$refs.child.propB).toBe(true)
+    expect(vm.$refs.child.propC).toBe(false)
   })
 
   it('detect possible camelCase prop usage', function () {