...
<button @click="setSelectedComponent('active-goals')">active button</button>
<button @click="setSelectedComponent('manage-goals')">manage button</button>
<active-goals v-if="selectedComponent==='active-goals'"></active-goals>
<manage-goals v-if="selectedComponent==='manage-goals'"></manage-goals>
...
...
<component :is="selectedComponent"></component>
...
<script>
componetns:{
ActiveGoals
...
},
data(){
selectedComponent : 'active-goals' // 그냥 초기화만 해줌
},
methods:{
setSelectedCompoent(cmp){
...
}
}
</script>
당연하게도 v-bind:
나 축약어 :
로 동적으로 바인딩해줘야 의미가 있기 때문에 <component>는 항상 :is
속성값을 갖고 있다고 생각하면 된다.
tab을 만드려면 emit
으로 마크업에서 받은 컴포넌트 문자열을 인수로 올려서 부모 컴포넌트에서 해당 컴포넌트를 렌더링하면 된다.
...
<keep-alive>
<component :is="selectedComponent"></component>
</keep-alive>
...
keep-alive로 동적 컴포넌트를 감쌀 수 있다. <keep-alive>는 동적 컴포넌트 개념으로 <component> 컴포넌트와 함께 동작한다.
이름 그대로 <keep-alive>는 컴포넌트를 완전히 제거하지 않고 이들의 상태를 내부에서 캐시로 저장하도록 Vue에 알려준다.
따라서 <keep-alive>를 추가하여 새로고침하면 새로운 텍스트를 입력하고 다른 컴포넌트에 갔다가 다시 돌아와도 여전히 텍스트를 볼 수 있다.