1. 程式人生 > >vue獲取v-model資料型別boolean改變成string

vue獲取v-model資料型別boolean改變成string

問題描述

今天產品問我一線上bug,怎麼radio型別改不了

問題分析

看程式碼,之前的哥們兒是怎麼寫的

//頁面
<div class="ui-form-box">
    <div class="ui-form-checkbox">
        <label for="delivery">
            <input type="radio" name="delivery" value="true" v-model="delivery">是
        </label>
    </div>
    <div class="ui-form-checkbox">
        <label for="delivery">
            <input type="radio" name="delivery" value="false" v-model="delivery">否
        </label>
    </div>
</div>

// 獲取資料
delivery: me.$data.delivery ? "1" : "0",

bug原因

按道理來說,選中了 否,value 為false, 提交的 delivery 值應該是 "0", 但實際上無論怎麼選擇,都是 "1"

打印出
typeof me.$data.delivery // string 所以取到的 me.$data.delivery 實際上是 "false"

問題出在繫結 radio 時候資料繫結的不對
那麼改成
<input type="radio" name="delivery" value=true v-model="delivery">是
去掉 true 的 "" 就對了麼,還是不對
應該改成

 <input type="radio" name="delivery" :value=true v-model="delivery">是
 
或者
<input type="radio" name="delivery" :value="true" v-model="delivery">是

使用 v-bind
加: 代表取的是變數, 是值
不加 :代表取的是字串

自己測試程式碼

<!DOCTYPE html>
<html lang="en">
   <head>
       <title></title>
       <meta charset="utf-8">
       <script src="https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.js"></script>
   </head>
   <body>
       <div id="app">
           <div>
               <label>
                   <input type="radio" name="delivery" :value="true" v-model="delivery">是
               </label>
               <label>
                   <input type="radio" name="delivery" :value="false" v-model="delivery">否
               </label>
           </div>
           <button @click="getDelivery">獲取delivery</button>
       </div>
       <script>
           var app = new Vue({
               el: '#app',
               data: {
                   delivery: true
               },
               methods: {
                   getDelivery: function () {
                       var a = this.$data.delivery;
                       console.log("a= ", a  ," ,typeof a = ", typeof a);
                       var b = a ? "1" : "0";
                       console.log("b", b);
                   }
               }
           })
       </script>
   </body>
</html>