Как принудительно перезагрузить узел #vuetify #treeview?

#vue.js #treeview #vuetify.js #treenode

#vue.js #просмотр дерева #vuetify.js #treenode

Вопрос:

Использование #vuetify #Treeview в #vue.js в проекте нет примера того, как перезагрузить отредактированный узел или как обновить родительский узел удаленного узла. Есть ли какой-либо образец или какая-либо ссылка на справку?

Комментарии:

1. Он должен обновлять узлы автоматически, но вы можете попробовать вызвать .updateAll()

2. @Styx На данный момент мы преобразовали модель данных дерева из json в string и обратно в json, так что дерево вынуждено перезагружать его, но это не самый разумный способ, если вы согласны. Они должны были предсказать метод для вызова, правильно?

3. Да, они должны были. Кстати, вы можете принудительно перезагрузить без преобразования в / из string / json: this.$set(this, 'treeModel', Object.assign({}, this.treeModel))

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

5. Вы могли бы привести минимальный пример проблемы в codepen, чтобы получить больше информации.

Ответ №1:

У меня была аналогичная проблема, я хотел удалить активный элемент из v-treeview.
Я использую логические удаления, поэтому мой код выглядит так. Это не требует ручного обновления древовидного представления или каких-либо странных вызовов назначения объектов

При нажатии на узел дерева он становится активным [0]

 <v-btn @click="deleteNode()">delete</v-btn>

deleteNode() {
    if (confirm("Are you sure you want to delete this item?")) {
        this.active[0].status = "Deleted"; //flag as deleted
        this.active.splice(0, 1); //remove from active array
        this.removeDeleted(this, this.items); now remove it from the bound array
    }
}

removeDeleted(me, currentArray) {
      const delItems = [];
      currentArray.forEach(element => {
        if (element.status == "Deleted") {
          delItems.push(element);
        }
        if (
          element.children != undefined amp;amp;
          element.children != null amp;amp;
          element.children.length > 0
        ) {
          me.removeDeleted(me, element.children);
        }
      });
      delItems.forEach(item => {
        currentArray.splice(currentArray.indexOf(item), 1);
      });
    },