JSFiddle - React, Tailwind, and code Playground
by kurotanshi
HTML
<script src="https://unpkg.com/mitt/dist/mitt.umd.js"></script>
<script src="https://unpkg.com/[email protected]/dist/vue.global.js"></script>
<div id="app">
<h1>Total: {{ sum }}</h1>
<button-counter @add-sum="plus"></button-counter>
<button-counter @add-sum="plus"></button-counter>
<button-reset></button-reset>
</div>
SCSS
#app {
display: block;
padding: 1rem;
padding-top: 2rem;
font-size: 1rem;
}
button {
display: block;
margin: 1rem 0;
font-size: 1rem;
}
JavaScript
const bus = mitt();
const app = Vue.createApp({
data () {
return {
sum: 0
}
},
methods: {
plus () {
this.sum++;
},
reset () {
this.sum = 0;
}
},
created () {
// 實體建立時,在 bus 身上註冊 reset 事件
// 觸發事件時呼叫 reset 方法
bus.on('reset', this.reset);
}
});
app.component('button-counter', {
template: `<button @click="plus">You clicked me {{ count }} times.</button>`,
data () {
return {
count: 0
};
},
methods: {
plus () {
this.count++;
this.$emit('add-sum');
},
reset () {
this.count = 0;
},
},
created () {
bus.on('reset', this.reset);
}
});
app.component('button-reset', {
template: `<button @click="reset">reset</button>`,
methods: {
reset () {
bus.emit('reset');
},
},
});
app.mount('#app');