Manipulando Arrays - Vue.js
No Vue.js, métodos específicos são definidos para simplificar o trabalho com arrays. Esses métodos permitem manipular os elementos de arrays diretamente:
push()
pop()
shift()
unshift()
splice()
sort()
reverse()
Esses métodos são implementações baseadas nos métodos JavaScript padrão de mesmo nome. Eles funcionam de forma semelhante, mas têm uma diferença importante: notificam o sistema Vue.js sobre as alterações no array, permitindo que o componente seja re-renderizado conforme necessário.
Além desses métodos, que modificam o array diretamente, há métodos como filter()
concat()
slice()
Adicionando e Removendo Elementos
O exemplo a seguir demonstra como adicionar um elemento a um array e como remover elementos usando o índice correspondente:
<!DOCTYPE html>
<html>
<head>
<title>Estudando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<p>
<input type="text" v-model="newPhone" />
<button v-on:click="phones.push(newPhone)">Adicionar</button>
</p>
<ul>
<li v-for="(phone, index) in phones" :key="index">
<p>{{ phone }} <button v-on:click="phones.splice(index, 1)">Remover</button></p>
</li>
</ul>
</div>
<script>
Vue.createApp({
data() {
return {
newPhone: '',
phones: ['iPhone 16', 'Samsung Galaxy S24', 'Xiaomi Mi 11', 'Motorola Edge 30']
};
}
}).mount('#app');
</script>
</body>
</html>
Neste exemplo, ao clicar no botão, o valor inserido no campo de texto (armazenado em newPhone
phones

Retornando um Novo Array
Métodos como slice()
concat()
filter()
slice()
<!DOCTYPE html>
<html>
<head>
<title>Estudando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<ul>
<li v-for="phone in phones" :key="phone">
<p>{{ phone }}</p>
</li>
</ul>
<button v-on:click="updateList">Atualizar</button>
</div>
<script>
Vue.createApp({
data() {
return {
phones: ['iPhone 16', 'Samsung Galaxy S24', 'Xiaomi Mi 11', 'Motorola Edge 30']
};
},
methods: {
updateList() {
this.phones = this.phones.slice(1, 3);
}
}
}).mount('#app');
</script>
</body>
</html>
Aqui, o método slice()
phones


Embora funcional, essa abordagem pode não ser ideal se o array original precisar ser preservado. Em situações como essa, a separação entre os dados e a sua representação visual é preferível.
Uma solução mais eficiente é o uso de propriedades computadas para representar subconjuntos do array, sem modificar os dados originais:
<!DOCTYPE html>
<html>
<head>
<title>Estudando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<input v-model.number="start" type="number" />
<input v-model.number="end" type="number" />
<ul>
<li v-for="phone in visibleList" :key="phone">
<p>{{ phone }}</p>
</li>
</ul>
</div>
<script>
Vue.createApp({
data() {
return {
start: 0,
end: 3,
phones: ['iPhone 16', 'Samsung Galaxy S24', 'Xiaomi Mi 11', 'Motorola Edge 30']
};
},
computed: {
visibleList() {
return this.phones.slice(this.start, this.end);
}
}
}).mount('#app');
</script>
</body>
</html>
Neste exemplo, as propriedades start
end
visibleList
slice()
