This repository has been archived on 2021-09-06. You can view files and clone it, but cannot push or open issues or pull requests.
vuejs_course/2021-01-25 vue-cli-01-a-new.../src/App.vue

141 lines
3.1 KiB
Vue

<template>
<div>
<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"
:email-address="friend.email"
:phone-number="friend.phone"
:is-favorite="friend.isFavorite"
@toggle-favorite="togggleFavoriteStatus"
@delete-friend="deleteFriend"
></friend-contact>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
friends: [
{
id: "manuel",
name: "Manuel Lorenz",
phone: "0123 4567 890",
email: "manuel@localhost.com",
isFavorite: true,
},
{
id: "julie",
name: "Julie Jones",
phone: "9876 5432 210",
email: "julie@localhost.com",
isFavorite: false,
},
],
};
},
methods: {
togggleFavoriteStatus(friendId) {
const identifiedFriend = this.friends.find(
(friend) => friend.id === friendId
);
identifiedFriend.isFavorite = !identifiedFriend.isFavorite;
},
addContact(NewFriend) {
this.friends.push(NewFriend);
},
deleteFriend(id) {
//if the ID matches drop the friend
this.friends = this.friends.filter((friend) => friend.id !== id);
},
},
};
</script>
<style>
@import url("https://fonts.googleapis.com/css2?family=Jost&display=swap");
* {
box-sizing: border-box;
}
html {
font-family: "Jost", sans-serif;
}
body {
margin: 0;
}
header {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
margin: 3rem auto;
border-radius: 10px;
padding: 1rem;
background-color: #58004d;
color: white;
text-align: center;
width: 90%;
max-width: 40rem;
}
#app ul {
margin: 0;
padding: 0;
list-style: none;
}
#app li,
#app form {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
margin: 1rem auto;
border-radius: 10px;
padding: 1rem;
text-align: center;
width: 90%;
max-width: 40rem;
}
#app h2 {
font-size: 2rem;
border-bottom: 4px solid #ccc;
color: #58004d;
margin: 0 0 1rem 0;
}
#app button {
font: inherit;
cursor: pointer;
border: 1px solid #ff0077;
background-color: #ff0077;
color: white;
padding: 0.05rem 1rem;
box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.26);
}
#app button:hover,
#app button:active {
background-color: #ec3169;
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>