Недопустимая длина строки RangeError в Vue только в определенных средах

У меня есть компонент Vue в производстве и тестовая среда. В производстве это в теме WordPress, и я получаю сообщение об ошибке:

jquery.min.js:2 Uncaught RangeError: Invalid string length
    at repeat$1 (vue.js:11398)
    at generateCodeFrame (vue.js:11380)
    at vue.js:11467
    at Array.forEach (<anonymous>)
    at compileToFunctions (vue.js:11464)
    at Vue.$mount (vue.js:11688)
    at Vue._init (vue.js:4901)
    at new Vue (vue.js:4967)
    at HTMLDocument.<anonymous> ((index):234)
    at l (jquery.min.js:2)

При тестировании я просто использую отдельный файл, и я не получаю ошибок, и компонент работает нормально. Я предполагаю, что в Wordpress и на сервере есть что-то другое, что вызывает ошибку.

Из того, что я прочитал, это просто длинная строка, которая вызывает ошибку, но как ее исправить, если вы не можете повторить ошибку локально? Есть ли какие-то общие "Got Ya" с Wordpress?

Сам компонент очень прост:

 <div v-for = "event in events" style = "    margin: 10px;" v-if = "events">
                                <button class = "accordion" @click = "show">
                                    <a :href = "event.url"> Buy Now </a>
                                    <p v-text = "event.name.text"></p>
                                    <span class = "date">{{ event.start.local | date }}</span>
                                    <span class = "capacity" v-if = "event.capacity"> Capacity: <span v-text = "event.capacity"></span></span>

                                </button>

                                <div class = "panel">
                                  <div class = "accordian-body" v-html = "event.description.html"></div>
                                  <a :href = "event.url" class = "buy-bottom"> Buy Now </a>
                                </div>

                            </div>
    jQuery(document).ready(function($) {

                    // Using a basic set of effect
                    var vm = new Vue({
                        el: '#main',
                        data: {

                                events: <?php echo json_encode($another); ?>, 
                        },

                        filters: {
                            date: function (value) {
                                return moment(value).format("dddd, MMM Do");   
                            }
                        },
                        mounted: function () {

                            console.info(this.events)
                            this.$nextTick(function () {
                                // code that assumes this.$el is in-document


                                var acc = document.getElementsByClassName("accordion");
                                var i;

                                for (i = 0; i < acc.length; i++) {
                                    acc[i].onclick = function(){
                                        this.classList.toggle("active");
                                        this.nextElementSibling.classList.toggle("show");
                                    }
                                }
                            })
                        },
                        methods:{
                            show: function(event){

                                var clickedElement = event.target;
                                $(clickedElement).siblings('panel').toggle("show");
                            }
                        }
                    })

                })

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
5 189
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Ошибка вводит в заблуждение. У меня была аналогичная проблема, и я обнаружил, что это проблема со встроенным шаблоном. Был тег стиля, который вызывал проблему в моем проекте. В вашем случае, я думаю, проблема в объекте данных. Используйте строковый литерал в вашем объекте данных событий, подобно этому, и он должен работать:

data: {

            events: `<?php echo json_encode($another); ?>`,
    },

Спасибо, эта ошибка вводит в заблуждение. И, кажется, трудно найти причину.

Packy 07.02.2019 20:26

Эта ошибка описана и устранена здесь: https://github.com/vuejs/vue/issues/9504

Ошибка в шаблоне генерирует ошибку в JS из-за ошибки в generateCodeFrame() или repeat$1() (может быть исправлено тем или иным образом).

Другой случай

В моем случае эта ошибка была вызвана тем, что я повторяю один и тот же атрибут HTML

<div class = "awesome wow"
     class = "anotherawesome">
</div>

Это поднимет тот же вопрос.

Решение

<div class = "awesome wow anotherawesome">
</div>

Другие вопросы по теме