Maison > Questions et réponses > le corps du texte
P粉7275312372023-09-04 12:48:32
La liaison suivante à la fonction toggle
n'a aucun sens pour moi :
:toggleLeft="toggle('left')" :toggleRight="toggle('right')
Étant donné que la fonction ne renvoie aucune valeur, c'est faux.
Ces deux liaisons provoqueront des appels de fonctions infinistoggle('left')
和toggle('right')
Ajoutez simplement console.log(direction)
dans la fonction toggle
函数中添加console.log(direction)
pour voir ce qui se passe.
Si vous souhaitez des conseils sur la bonne solution, veuillez décrire ce que vous souhaitez réaliser.
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>