Skip to content

Instantly share code, notes, and snippets.

@tristanbailey
Created November 13, 2017 13:14
Show Gist options
  • Save tristanbailey/b3d6ad0ee61f1a5137bca64889f1fcf6 to your computer and use it in GitHub Desktop.
Save tristanbailey/b3d6ad0ee61f1a5137bca64889f1fcf6 to your computer and use it in GitHub Desktop.
Ripple events down to components using watch
<div id="app">
<button @click="changeAll(true)">
OPEN ALL THE BOXES
</button>
<button @click="changeAll(false)">
Close ALL THE BOXES
</button>
<drop-down :override="override">Hello</drop-down>
<drop-down :override="override">Hello</drop-down>
<drop-down :override="override">Hello</drop-down>
<drop-down :override="override">Hello</drop-down>
<drop-down :override="override">Hello</drop-down>
<drop-down :override="override">Hello</drop-down>
<drop-down :override="override">Hello</drop-down>
<drop-down :override="override">Hello</drop-down>
<drop-down :override="override">Hello</drop-down>
</div>
const DropDown = {
name: 'DropDown',
props: ['override'],
template: `<div class="dropdown">
<h3 @click="toggle">Title</h3>
<div v-show="isOpen"><slot></slot></div>
</div>`,
data() {
return {
isOpen: false
}
},
methods: {
toggle() {
this.isOpen = !this.isOpen;
}
},
watch: {
override() {
this.isOpen = this.override
}
}
}
new Vue({
el: '#app',
components: {
DropDown
},
data: {
override: false
},
methods: {
changeAll(polarity) {
this.override = polarity
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.3/vue.min.js"></script>
.dropdown {
display: block;
padding: 0.1rem 0.5rem;
background: #f2f2f2;
margin: 0 auto 1rem;
max-width: 50rem;
}
h3 {
cursor: pointer;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment