Задать вопрос

Как раскрыть текст инфоблока по нажатию?

Доброго времени суток!
У меня на гугл карте есть инфо блоки, связанные с маркерами. Нужно чтобы их текст скрывался в такой вид "...", а при нажатии появлялась его информация.
Я придумал вот такое тривиальное решение:
<gmap-info-window v-if="m.data.length > 0" @click="const text = m.data">{{ text === undefined ? '...' : text }}</gmap-info-window>

Но у меня не получилось. Даже событие клика не срабатывает, даже в dev-tools vue.
Пожалуйста, скажите что не так и как решить проблему?
  • Вопрос задан
  • 140 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
Вы, товарищ, похоже не понимаете:
а) как работает const;
b) как работают inline обрабочики событий;
c) как работает Vue.

a) const действителен только в рамках блока.
b) Код написанный inline обрабочике - это всего лишь тело анонимной функции. Функция создаёт свой scope, а значит учитывая пункт a - обявленная переменная больше нигде не видна.
c) Ваш шаблон компилируется(Vue.compile вам в помощь) примерно вот в такую функцию
function anonymous() {
  with(this) {
    return m.data.length > 0 ? _c("gmap-info-window", {
      on : {
        "click" : function($event$jscomp$0) {
          const text$jscomp$10 = m.data;
        }
      }
    }, [_v(_s(text === undefined ? "..." : text))]) : _e();
  }
}
и вполне очевидно, что ничего и не должно работать.

Решение проблемы: либо хранить где-то в data состояние, либо сделать компонент-обёртку(условно gmap-info-window-collapsible) над gmap-info-window, который будет хранить состояние и сворачивать-разворачивать по клику.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы