Rumah > Soal Jawab > teks badan
P粉7275312372023-09-04 12:48:32
Ikatan berikut pada fungsi toggle
tidak masuk akal bagi saya:
:toggleLeft="toggle('left')" :toggleRight="toggle('right')
Oleh kerana fungsi tidak mengembalikan sebarang nilai, ini adalah salah.
Dua ikatan ini akan menyebabkan panggilan fungsi tak terhinggatoggle('left')
和toggle('right')
Hanya tambah console.log(direction)
dalam fungsi toggle
函数中添加console.log(direction)
untuk melihat apa yang berlaku.
Jika anda mahukan nasihat tentang penyelesaian yang betul, sila terangkan apa yang anda ingin capai.
Vue.component('toggle-buttons',{
props: {
leftSelectedInitially: {
type: Boolean,
default: true,
}
},
data() {
return {
leftSelected: true,
rightSelected: false,
}
},
beforeMount() {
//this.leftSelected = this.leftSelectedInitially;
//this.rightSelected = !this.leftSelectedInitially;
},
methods: {
toggle(override) {
console.log(`override: ${override}`)
this.leftSelected = override == 'left';
this.rightSelected = override == 'right';
}
},
template: `
<div role="list">
<div role="listitem">
<slot name="left" :is-selected="leftSelected" :toggleLeft="toggle('left')" />
</div>
<div role="listitem">
<slot name="right" :is-selected="rightSelected" :toggleRight="toggle('right')" />
</div>
</div>
`
});
new Vue({
el:'#app',
methods: {
toggle(direction) {
console.log(`direction: ${direction}`)
this.$refs.tb.toggle(direction);
}
}
})
#app { line-height: 2; }
[v-cloak] { display: none; }
<div id="app">
<toggle-buttons ref="tb">
<template v-slot:left="{ isSelected }">
<button
class="button"
:class="{ secondary: !isSelected }"
:aria-pressed="isSelected"
:togglable="true"
v-text="'left'"
@click="toggle('left')"
/>
</template>
<template v-slot:right="{ isSelected }">
<button
class="button"
:class="{ secondary: !isSelected }"
:aria-pressed="isSelected"
:togglable="true"
v-text="'right'"
@click="toggle('right')"
/>
</template>
</toggle-buttons>
</div>
<script src="https://unpkg.com/vue@2/dist/vue.min.js"></script>