目標: 經過手風琴的小實例,瞭解vue的父子組件的事件傳遞方式(其中一種)。vue實例惟一標識_uid的實際使用。javascript
建議閱讀時間: 3分鐘css
手風琴,涉及到兩個組件,<collapse>
和<collapse-item>
, 要實現的功能無非兩點:html
<collapse-item>
的時候,父組件要知道點了誰小知識: 每一個Vue實例都會有一個遞增的id,能夠經過this._uid獲取前端
代碼實現:vue
// 引入vue
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
// 定義個父組件collapse
Vue.component('Collapse', {
methods: {
cut(childId) {
this.$children.forEach(child => {
console.log('ci', child._uid)
if(child._uid !== childId) {
child.show = false;
}
});
}
},
template: `<div class="wrap"> <slot></slot> </div>`
})
複製代碼
Vue.component('CollapseItem', {
props: ['title'],
data() {
return {show: false}
},
methods: {
change() {
console.log(this._uid)
this.$parent.cut(this._uid);
this.show = !this.show;
}
},
template: `<div> <div class="title" @click="change">{{title}}</div> <div v-show="show"> <slot></slot> </div> </div>`
})
複製代碼
<div id="app">
<collapse>
<collapse-item title="react">內容1</collapse-item>
<collapse-item title="vue">內容2</collapse-item>
<collapse-item title="nodejs">內容2</collapse-item>
</collapse>
</div>
<script> let vm = new Vue({ el: '#app' }) </script>
複製代碼
感謝閱讀!java
我是海明月,前端小學生。node