[.Net C# MVC+VueJs] 解決 Vue Js 使用 jQuery DatePicker 時,抓不到日期 value 問題

通常我們使用 vue js 的前端語法時,沒有較好的日期物件,所以會使用 jQuery DatePicker 來做為日期選擇器,
但jQuery DatePicker 的物件值會和 VueJs 的值分開,導致vue js 無法抓到所選擇的值,
這時候可以使用 jQuery 的 onchange 事件來解決這個問題。

原始問題

先做出原始的問題語法

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>VueJsDatePicker</title>
    <script src="~/Resources/Scripts/Vue/vue.js"></script>
    <script src="~/Resources/Scripts/jQuery/jquery-1.10.2.js"></script>
    <script src="~/Resources/Scripts/jQuery/jquery-ui.js"></script>
    <script src="~/Resources/Scripts/jQuery/jquery.ui.datepicker-zh-TW.js"></script>

    <link href="~/Resources/Content/jquery-ui.css" rel="stylesheet" />

</head>
<body>
    <div id="DatePickerVue"> 
        {{JSON.parse(JSON.stringify(form))}}
        <br />
        日期: <input type="text" id="Date" v-model="form.Date.value" />

        <br />
        
    </div>
</body>
</html>

<script type="text/javascript">
    var DatePickerVue = new Vue({
        el: '#DatePickerVue'
            , data: function () {
                var data = {
                    actions: {}, form: {}, options: {}
                    , view: false
                };
                
                return data;
            }
            , created: function () {
                var self = this;
                var columnList = [
                    'Date'
                ];
                self._CreateForm(self.form, columnList);
            }
            , methods: {
                _CreateForm: function (form, variable) {
                    for (var key in variable) {
                        control = {
                            id: variable[key]
                            , value: ''
                        };
                        Vue.set(form, variable[key], control);
                    }
                }
            }
    })

    $(document).ready(function () {
        $("#Date").datepicker();
    });

頁面顯示結果

我選擇了日期之後,vue js 的物件的值,並不會抓到我所輸入的值。
也就是 value: "" 值是空的

解決方法

將觸發jQuery DatePicker 日曆的語法加上 onchange 事件,再指定值

    $(document).ready(function () {
        $("#Date").datepicker().on("change", function (e) {
            DatePickerVue.$data.form.Date.value = $(this).val();
        });
    });

這樣就可以了,再來前端看一下結果

這時候選擇了 日曆上的日期,vue js 的form 物件底下的 Date 就會抓到值了。

驗證的語法就是使用 {{JSON.parse(JSON.stringify(form))}} 來觀查物件的值。