Vue-draggable - невозможно напрямую изменить мой массив

Я использую vue-draggable для изменения порядка элементов массива. Скажем, мой массив:

data: {
 array1: [{text: 'text1'},{text: 'text2'},{text: 'text3'}]
}

в моем шаблоне я просто использую:

<draggable v-model = "array1" >
v-for etc...
</draggable>

И это нормально работает.

Теперь мне нужно переместить код внутрь компонента и использовать array1 в качестве опоры.

Итак, я перемещаю свой array1 в props внутри дочернего компонента:

props['array1'],

Я использую свой vue-draggable и бац: "[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders."

Я не могу просто объявить array1 внутри данных, потому что он асинхронный. Итак, я пишу это внутри вычисленного:

   array2: {
      get: function () {
        //return JSON.parse(JSON.stringify(this.array1))          
        return this.array1.slice()          
      },
      set: function () {
        this.array2
      }
  },

и это явно не сработает, потому что геттер всегда жестко запрограммирован как slice () свойства. Вчера я задал вопрос: Вычисляемый сеттер vuejs данного свойства не является реактивным

Итак, совет состоит в том, чтобы написать какой-то новый вычисляемый и добавить оператор if внутри вычисленного array2:

   array2: {
      get: function () {
        if (this.modifiedArray) {
            return this.modifiedArray;
        }
        //return JSON.parse(JSON.stringify(this.array1))          
        return this.array1.slice()          
      },
      set: function () {
        this.proTemplate
      }
  },

и у меня проблема с обращением к измененным vue-draggable изменениям в modifiedArray computed, потому что я не могу изменить v-модель внутри draggable:

<draggable v-model = "array2">

Кто-нибудь знает, как изменить его, чтобы получить результат с перетаскиванием vue внутри внешнего массива / вычисления?

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

Sphinx 02.05.2018 21:04

Реквизиты предназначены для использования только для чтения. Тем не менее, как предлагает @Sphinx, вы можете создать событие, чтобы произвести мутацию в родительском компоненте.

Vivick 07.05.2018 17:09
Поведение ключевого слова "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) для оценки ваших знаний,...
2
2
937
1

Ответы 1

Я попытался воспроизвести то, что я понимаю о вашей проблеме здесь

Я использовал метод clone из библиотеки Lodash, чтобы предотвратить ошибку "[Vue warn]: Avoid mutating a prop directly...".

Надеюсь, поможет

Это не сработает, потому что prop ['array'] асинхронный. Это просто клонирует пустой массив в начале. Это довольно сложно :)

gileneusz 02.05.2018 15:59

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