<section id="app">
<ul v-for="friend in friends" :key="friend.id">
<li>
<h2>{{friend.name}}</h2>
<button @click="toggleDetails">{{seeDetail ? 'Hide' : 'Show'}}Details</button>
<ul v-if="seeDetail()">
<li><strong>Phone:</strong>{{friend.phone}}</li>
<li><strong>Email:</strong>{{friend.email}}</li>
</ul>
</li>
</ul>
</section>
data(){
return{
seeDetail:false,
friends:[
{id:"정우", name:"KJW", phone:"010-1111-1111", email:"google@localhost.com"},
{id:"엘리스", name:"OYZ", phone:"010-2222-2222", email:"elice@localhost.com"},
]
}
},
methods:{
toggleDetails(){
return this.seeDetail = !this.seeDetail
}
}
const app = Vue.createApp({...})
app.component(식별자, Vue구성객체);
app.mount("css selector")
<section id="css selector">
<식별자></식별자>
</section>
해당 컴포넌트 id
) : 컴포넌트는 기본적으로 커스텀 HTML 요소이기 때문이다. 커스텀 HTML 태그를 정의해 줘야 하는데 예를 들면 user-contact
나 friend-contact
와 같이 정의해 볼 수 있다.대시 기호(-)
를 포함한 식별자를 사용해야하는데 그 이유는 공식 내장 HTML 요소와 충돌되는 일을 막기 위하기 때문이다....
}) 의 ...
과 같은 구성객체를 전달해주어야한다.만약 이를 여러번 쓰면 각각 같은 컴포넌트들이 재사용
될 것이고 그렇게 되면 각각은 독립적인 vue app으로 HTML 코드를 쉽게 복제하고 캡슐화할 수 있는 것이다.
하지만 또 필요에 따라서 정보를 공유하기 위해 서로 통신도 할 수 있으니 1석 2조라고 할 수 있겠다.