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

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

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

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

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

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

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

Так что я двигаю array1 для поддержки внутри дочернего компонента:

props['array1'],

Я использую свой vue-draggable и bam: "[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
      }
  },

и это, очевидно, не сработает, потому что getter всегда жестко закодирован как slice() prop. Я задал вопрос вчера здесь: 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 изменений к модифицированному Array, вычисленному, потому что я не могу изменить v-модель внутри draggable:

<draggable v-model="array2">

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

1 ответ

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

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

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

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