Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.10.2022, 20:47
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 133

treeview на vue
Все здравия!
Делаю на VUE визуальное представление js структуры в виде древовидного объекта. Делаю это рекурсивно.
Код примерно такой:
template: `
    <ul class="Container">
      <template v-for="child,key in object">
        <template v-if='typeof(child) ==="object"'>
          <li v-if="check(key)" class="Node ExpandOpen">
            <div class="Expand "></div>
            <div class="Content">{{key}}</div>
            <node :object="child"></node>
          </li>
          <li v-else class="Node ExpandClosed" v-on:click="treeEvent(key)">
            <div class="Expand "></div>
            <div class="Content">{{key}}</div>
          </li>
        </template>
        <li v-else class="Node ExpandLeaf">
          <div class="Expand"></div>
          <div class="Content">{{key}}:{{child}}</div>
        </li>
      </template>
    </ul>
    `,
    name: 'node',
    props: ["object"],
    data:()=>({ visual:{} }),
    methods : {
      check: function( index ){
        if(this.visual[index] === undefined ) return false;
        return this.visual[index];
      },
      treeEvent: function(key){
        if(this.visual[index] === undefined ) this.visual[index] = true;
        else this.visual[index] = !this.visual[index];
      }
    }

Все прекрасно отображается. и все уровни отрабатываются. Следующая задача - оживить это дело. т.е. нажимая мышкой чтобы уровни открывались и закрывались. Для решения этой задачи на каждом уровне рекурсии в компоненте был заведена структура - visual
события нажатия отрабатываются, но не происходит обновление картинки. Оно и понятно.........
может быть кто нибудь подскажет - стратегию. Как в таком случае нужно поступить?
Спасибо

Последний раз редактировалось fxobject, 28.10.2022 в 21:38.
Ответить с цитированием
  #2 (permalink)  
Старый 28.10.2022, 20:49
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 133

хочу подчеркнуть - у меня рекурсия компонентов. т.е. на каждом уровне доступен только текущий слой отображаемой структуры и все что ниже
получается как то так:
Изображения:
Тип файла: jpg 1.jpg (16.5 Кб, 3 просмотров)

Последний раз редактировалось fxobject, 28.10.2022 в 20:53.
Ответить с цитированием
  #3 (permalink)  
Старый 28.10.2022, 21:13
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 133

можно использовать
forceUpdate();
с блокировкой всплытия. с ним работает как надо. но это не интерстный вариант. Хотелось бы через :key. Но как? пока не соображу
Heeeeeelp!
Ответить с цитированием
  #4 (permalink)  
Старый 28.10.2022, 21:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

fxobject,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #5 (permalink)  
Старый 31.10.2022, 21:35
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 133

ну хорошо, фиг с ним, другой вопрос - а можно ли как то оформить компоненту в виде класса? чтобы было примерно так?
new Vue({
    el: "#app",
    components:{ tree1: new treeObject() },
    data: () => ({
      .........

т.е. в каком нибудь месте подгружу модуль в виде класса (не объекта, а его описания) и где нужно создам как новый объект. что скажете?

Последний раз редактировалось fxobject, 31.10.2022 в 21:43.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Vue 2 и router 4 torsar Библиотеки/Тулкиты/Фреймворки 1 04.06.2022 23:43
что такое defineComponent (vue cli) fori Javascript под браузер 1 22.03.2021 20:46
Локальное подключение компонентов vue? Lodas Библиотеки/Тулкиты/Фреймворки 0 11.04.2020 22:42
Vue + Axios + PHP + MySQL Volun Библиотеки/Тулкиты/Фреймворки 13 03.04.2019 18:50
UI верстальщик. VUE + Semantic UI shelomar Работа 0 12.01.2018 15:40