Изменение массива в свойстве данных
Я полагаю, вы знаете реактивную систему Vue.js, когда вы определяете переменные в свойстве data
. Когда вы изменяете массив, возможно, вы устанавливаете индекс непосредственно, как показано ниже.
export default { data () { return { testArray: ['test1', 'test2', 'test3'] } } } this.testArray[1] = 'test4';
К сожалению, Vue.js не может обнаружить такие изменения. Сама переменная будет изменена, но реактивная система не сможет работать (например, даже если этот массив используется в шаблоне и изменен, это изменение не отразится в браузере).
Кроме того, указание длины массива имеет ту же проблему 😥
this.testArray.length = 0;
Причины и способы устранения
Как написано в Официальном руководстве Vue.js, есть типы изменений, которые Vue не может обнаружить. На самом деле я уже объяснял типы в первом разделе😼.
В Vue.js полезно использовать Array.prototype.splice()
. splice()
изменяет содержимое массива, удаляя существующие элементы и/или добавляя новые элементы. Подробности см. в посте Касун Дилуника ниже.
Давайте исправим пример, который я упоминал ранее. Это может быть трудно понять, так как splice()
имеет три переменные... Код ниже заменит вторые элементы на test4
.
export default { data () { return { testArray: ['test1', 'test2', 'test3'] } } } this.testArray.splice(1, 1, 'test') // Result: [ 'test1', 'test4', 'test3' ]
Если вы хотите удалить один или несколько элементов без замены из массива, вы можете написать, как показано ниже.
export default { data () { return { testArray: ['test1', 'test2', 'test3'] } } } this.testArray.splice(0, 2) // Result: [ 'test3' ]
Надеюсь, это будет полезно =)