Получить атрибут данных как объект в Vue JS: вернуть [объектный объект] даже с JSON .stringify - PullRequest
2 голосов
/ 31 января 2020

Я пытаюсь использовать Vue JS для достижения этой цели: нажмите кнопку с названием дня в качестве значения, покажите время открытия / закрытия магазина. моя идея состоит в том, чтобы прикрепить значение в атрибуте data-day и назначить значение для div, который отображает время открытия / закрытия. У меня есть следующий код:

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<html>

<head>
    <meta charset="UTF-8">
    <title></title>
</head>

<body>
    <div id="OpeningTimes">
        <input type="button" v-for="(value, key) in times" :value="key" :data-day="value" @click="showOpeningTimes">
        <div ref="info"></div>
    </div>
</body>
<script type="module">
    var app = new Vue({
        el: '#OpeningTimes',
        data: {
            times: {
                'Monday': {
                    '09:00': 'open',  // Open
                    '12:20': 'closed', // Close for Lunch
                    '13:30': 'open',  // Return from Lunch
                    '17:00': 'closed' // Close for the day
                },

                'Tuesday': {
                    '09:00': 'open',  // Open
                    '12:20': 'closed', // Close for Lunch
                    '13:30': 'open',  // Return from Lunch
                    '17:00': 'closed' // Close for the day
                }
            }
        },
        methods: {
            showOpeningTimes: function (e) {
                this.$refs.info.innerText = e.target.dataset.day;
            }
        }
    })
</script>

</html>

Кажется, работает, потому что я вижу "key" в объекте дня, который был привязан к значению кнопки, но когда я попытался получить доступ к атрибуту data-day в метод, он продолжает давать мне [object object]. Я попытался JSON.stringify(e.target.dataset.day), все еще дал мне «[объект объекта]», как я могу отобразить содержимое в объекте? Что мне здесь не хватает?

1 Ответ

4 голосов
/ 31 января 2020

Я думаю, что использование key для получения value в вашей функции showOpeningTimes было бы лучше. Также вы можете передать key непосредственно в click привязку:

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<html>

<head>
    <meta charset="UTF-8">
    <title></title>
</head>

<body>
    <div id="OpeningTimes">
        <input type="button" v-for="(value, key) in times" :value="key" @click="showOpeningTimes(key)">
        <div ref="info"></div>
    </div>
</body>
<script type="module">
    var app = new Vue({
        el: '#OpeningTimes',
        data: {
            times: {
                'Monday': {
                    '09:00': 'open',  // Open
                    '12:20': 'closed', // Close for Lunch
                    '13:30': 'open',  // Return from Lunch
                    '17:00': 'closed' // Close for the day
                },

                'Tuesday': {
                    '09:00': 'open',  // Open
                    '12:20': 'closed', // Close for Lunch
                    '13:30': 'open',  // Return from Lunch
                    '17:00': 'closed' // Close for the day
                }
            }
        },
        methods: {
            showOpeningTimes: function (key) {
                this.$refs.info.innerText = JSON.stringify(this.times[key]);
            }
        }
    })
</script>

</html>

Как было указано в другом ответе, вы также можете напрямую передать value. Все зависит от того, нужен ли вам сам value или key, который вам понадобится для чего-то другого в вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...