이 모든 소품을 잡아 뷰 JS와 side-nav
구성 요소, 내가 index.php를이 무엇인지 구성 요소
<div class="container">
<side-nav></side-nav>
</div>
를 클래스를이 내가
<template>
<div class="container">
<nav-section name="General">
<nav-item name="Home">
<nav-child name="Dahsboard 1" url="#"></nav-child>
<nav-child name="Dahsboard 2" url="#"></nav-child>
</nav-item>
<nav-item name="Settings">
<nav-child name="Setting 1" url="#"></nav-child>
<nav-child name="Setting 2" url="#"></nav-child>
</nav-item>
<nav-item name="Admin">
<nav-child name="Admin 1" url="#"></nav-child>
<nav-child name="Admin 2" url="#"></nav-child>
</nav-item>
</nav-section>
<nav-section name="Data Analysis">
<nav-item name="Data Source">
<nav-child name="Source 1" url="#"></nav-child>
<nav-child name="Source 2" url="#"></nav-child>
</nav-item>
<nav-item name="Visualization">
<nav-child name="Chart 1" url="#"></nav-child>
<nav-child name="Chart 2" url="#"></nav-child>
</nav-item>
<nav-item name="Others">
<nav-child name="Other 1" url="#"></nav-child>
<nav-child name="Other 2" url="#"></nav-child>
</nav-item>
</nav-section>
</div>
</template>
<script>
import NavSection from './NavSection.vue'
import NavItem from './NavItem.vue'
import NavChild from './NavChild.vue'
export default {
components: {
'nav-section':NavSection,
'nav-item': NavItem,
'nav-child': NavChild,
},
data() {
return {
}
},
mounted() {
console.log('Component mounted.')
},
}
</script>
SideNav.vue이 무엇인지입니다 토글
이것은 내가 NavSection.vue이 무엇인지
<template>
<section>
<h6>{{ name }}</h6>
<ul>
<slot></slot>
</ul>
</section>
</template>
<script>
export default {
props: ['name'],
data() {
return {
}
}
}
</script>
이 내가 NavItem.vue에 무슨이다
<template>
<li>
<a @click="toggleClass">{{ name }}</a>
<ul :class="{ 'active': isActive}">
<slot></slot>
</ul>
</li>
</template>
<script>
export default {
props: ['name'],
data() {
return {
isActive: false,
names: []
}
},
created() {
//this returns all the names in console
console.log(this.name)
//However, saving it to data->names array, only saves the clicked item
this.names = this.name
},
methods: {
toggleClass() {
this.isActive = true
//this works, but I want the value to go back to FALSE once I clicked on another item
//one way I think it can be accomplished is comparing the cliked item's name prop with all the names
//something like this, (refer to created method)
this.names.forEach(element => {
this.isActive = (element.name == this.names)
})
}
}
}
</script>
는 그리고이 각 navSection
여러 navItem
을 가지고, 내가 NavChild.vue
<template>
<li>
<a :href="url">{{ name }}</a>
</li>
</template>
<script>
export default {
props: ['name', 'url'],
data() {
return {
}
}
}
</script>
당신이 볼 수 있듯이에서 무엇을하고 각 navItem
여러 navChild
구성 요소가 있습니다. 함수 toggleClass
이 에있는 각 앵커 태그를 클릭하여 실행되면 isActive
속성은 해당 항목의 값을 TRUE
으로 업데이트해야하고 2는 isActive
이 각 섹션 내의 다른 항목을 클릭하면 False
으로 돌아갑니다 .
나는 NavItem.vue
파일에 주석으로, 일할 수있는 하나의 생각을했다,하지만 불행히도 내가 잡을 수있는 방법을 찾을 could't 모든 props
말 name
소품의 NavItem
구성 요소에서 각 항목에 대해. 전달 된 모든 데이터를 특정 prop
에 저장하고 저장하는 방법이 있습니까?
코드를 개선하거나 동일한 작업을 수행하는 다른 편리한 방법에 대한 제안은 크게 감사하겠습니다. 해피 코딩!
당신은 하위 구성 요소와 동일하지 않습니다 슬롯을 사용하고 있습니다. 라디오 그룹 동작에는 NavItem과 NavSection 간의 조정이 필요하며 부모/자식으로 설정하지 않으면 어색합니다. –
슬롯을 사용하지 않고 동일한 작업을 수행하는 간단한 jsfiddle 예제는 무엇입니까? 탐색 섹션에 새 항목을 추가 할 때 매우 읽기 쉽고 깨끗하게 만들었 기 때문에 슬롯을 사용했습니다. 그러나 나는 다른 깔끔한 접근법으로도 괜찮을 것입니다. @RoyJ – satancorpse