Иногда нам нужно глубоко наблюдать за массивом объектов и вычислять изменения с помощью Vue.js.
В этой статье мы рассмотрим, как глубоко наблюдать за массивом объектов и вычислять изменения с помощью Vue.js.
Глубокий просмотр массива объектов и расчет изменений с помощью Vue.js
Мы можем глубоко наблюдать за массивом объектов и вычислять изменения с помощью Vue.js с наблюдателями.
Например, мы можем написать:
App.vue
<template> <div id="app"> <Person :person="person" v-for="person in people" :key="person.id"></Person> </div> </template> <script> import Person from "@/components/Person"; export default { name: "App", components: { Person, }, data() { return { people: [ { id: 0, name: "Bob", age: 27 }, { id: 1, name: "Frank", age: 32 }, { id: 2, name: "Joe", age: 38 }, ], }; }, }; </script>
Person.vue
<template> <div class="hello"> <div class="person"> {{ p.name }} <input type="text" v-model="p.age" /> </div> </div> </template> <script> export default { name: "Person", props: { person: Object, }, data() { return { p: {}, }; }, watch: { p: { handler(newValue) { console.log(newValue.id); console.log(newValue.age); }, deep: true, }, }, mounted() { this.p = { ...this.person }; }, }; </script>
В App.vue
у нас есть массив people
, который используется для рендеринга компонента Person
с помощью v-for
.
Мы передаем person
как значение реквизита person
.
Затем в Person
мы добавляем свойство props
, чтобы принять свойство person
.
И у нас есть реактивное свойство p
, которое мы установили на копию person
в качестве значения в хуке mounted
.
В наблюдателе p
в свойстве watch
мы регистрируем значение newValue
.
Мы устанавливаем для параметра deep
значение true
, чтобы позволить нам отслеживать изменения в объектах.
А в шаблоне мы рендерим p.name
и привязываем p.age
к входному значению ввода текста.
Теперь, когда мы вводим текст, должен запускаться наблюдатель p
и регистрировать значение newValue.age
.
Заключение
Мы можем глубоко наблюдать за массивом объектов и вычислять изменения с помощью Vue.js с наблюдателями.
Дополнительные материалы на PlainEnglish.io.
Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .