1 files added
2 files modified
| | |
| | | <header> |
| | | <h1>My friends</h1> |
| | | </header> |
| | | <new-friend @add-contact="addContact"></new-friend> |
| | | <ul> |
| | | <friend-contact |
| | | v-for="friend in friends" |
| | | :key="friend.id" |
| | | :id="friend.id" |
| | | :name="friend.name" |
| | | :phone-number="friend.phone" |
| | | :email-address="friend.email" |
| | | :is-favorite="friend.isFavorite" |
| | | @toggle-favorite="toggleFavoriteStatus" |
| | | ></friend-contact> |
| | | <friend-contact v-for="friend in friends" |
| | | :key="friend.id" |
| | | :id="friend.id" |
| | | :name="friend.name" |
| | | :phone-number="friend.phone" |
| | | :email-address="friend.email" |
| | | :is-favorite="friend.isFavorite" |
| | | @toggle-favorite="toggleFavoriteStatus"></friend-contact> |
| | | </ul> |
| | | </section> |
| | | </template> |
| | |
| | | name: "Julie Jones", |
| | | phone: "09876 543 221", |
| | | email: "julie@localhost.com", |
| | | isFavorite: true, |
| | | isFavorite: true, |
| | | }, |
| | | ], |
| | | } |
| | | }, |
| | | methods:{ |
| | | toggleFavoriteStatus(friendId){ |
| | | const found = this.friends.find( |
| | | watch: { |
| | | |
| | | }, |
| | | methods: { |
| | | toggleFavoriteStatus(friendId) { |
| | | const found = this.friends.find( |
| | | (friend) => friend.id === friendId |
| | | ); |
| | | found.isFavorite = !found.isFavorite; |
| | | }, |
| | | |
| | | addContact(name, phone, email) { |
| | | const newFriendContact={ |
| | | id: new Date().toISOString + name, |
| | | name: name, |
| | | phone: phone, |
| | | email:email, |
| | | }; |
| | | |
| | | this.friends.push(newFriendContact); |
| | | } |
| | | |
| | | } |
| | | }; |
| | | </script> |
| | |
| | | list-style: none; |
| | | } |
| | | |
| | | #app li { |
| | | #app li, |
| | | #app form { |
| | | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26); |
| | | margin: 1rem auto; |
| | | border-radius: 10px; |
| | |
| | | border-color: #ec3169; |
| | | box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.26); |
| | | } |
| | | |
| | | #app input { |
| | | font: inherit; |
| | | padding: 0.15rem; |
| | | } |
| | | |
| | | #app label { |
| | | font-weight: bold; |
| | | margin-right: 1rem; |
| | | width: 7rem; |
| | | display: inline-block; |
| | | } |
| | | |
| | | #app form div { |
| | | margin: 1rem 0; |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <form @submit.prevent="submitData"> |
| | | <div> |
| | | <label>Nome:</label> |
| | | <input type="text" v-model="name" /><br> |
| | | </div> |
| | | <div> |
| | | <label>Phone:</label> |
| | | <input type="tel" v-model="phone" /><br> |
| | | </div> |
| | | <div> |
| | | <label>Email:</label> |
| | | <input type="email" v-model="email" /><br> |
| | | </div> |
| | | <div> |
| | | <button>Add new friend</button> |
| | | </div> |
| | | </form> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | name: "", |
| | | phone: "", |
| | | email: "", |
| | | } |
| | | }, |
| | | emits: ['add-contact'], |
| | | methods: { |
| | | submitData() { |
| | | this.$emit('add-contact', this.name, this.phone, this.email); |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style></style> |
| | |
| | | |
| | | import App from "./App.vue"; |
| | | import FriendContact from "./components/FriendContact.vue"; |
| | | import NewFriend from "./components/NewFriend.vue"; |
| | | |
| | | const app = createApp(App); |
| | | |
| | | app.component("friend-contact", FriendContact); |
| | | app.component("new-friend", NewFriend); |
| | | |
| | | app.mount("#app"); |