Как переключаться между компонентами в vue.js?

#javascript #vue.js #vuejs2

Вопрос:

Я разрабатываю три компонента Dashboard.vue(родительский компонент), который содержит два дочерних компонента, таких как DisplayBooks.vue и sortBooksLowtoHigh.vue .в компоненте панели мониторинга он будет содержать некоторые параметры[сортировка по релевантности] по умолчанию компонент sortBooksLowToHigh не должен быть видимым, а компонент displayBooks должен быть виден по умолчанию, когда я нажимаю на опцию цена:низкая высота компонент DisplayBooks должен быть скрыт, а компонент sortBooksLowtoHigh должен быть виден.Как достичь этого, пожалуйста, помогите мне решить эту проблему.

Dashboard.vue

 <template>
<div class="main">
    <div class="navbar navbar-default navbar-fixed-top">
        <div class="navbar-header">
            <img src="../assets/education.png" alt="notFound" class="education-image" />
        </div>
        <ul class="nav navbar-nav">
            <li>
                <p class="brand">Bookstore</p>
            </li>
        </ul>
        <div class="input-group">
            <i class="fas fa-search"></i>
            <div class="form-outline">
                <input type="search" class="form-control" placeholder='search...' />
            </div>
        </div>

        <ul class="nav navbar-nav navbar-right" id="right-bar">
            <li><a> <i class="far fa-user"></i></a></li>
            <p class="profile-content">profile</p>
            <li><a><i class="fas fa-cart-plus"></i></a></li>
            <p class="cart-content">cart</p>
        </ul>
    </div>
    <div class="mid-body">
        <h6 >Books<span   class="items">(128items)</span></h6>
        
        <select  class="options" @change="applyOption">
            <option disabled value="">Sort by relevance</option>
             <option value="HighToLow">price:High to Low</option>
            <option value="LowToHigh">price:Low to High</option>
        </select>
        
    </div>
 <DisplayBooks v-show="flag" />
<sortBooksLowtoHigh v-show="!flag" />
<sortBooksHightoLow v-show="!flag" />
</div>
</template>

<script>
import sortBooksLowtoHigh from './sortBooksLowtoHigh.vue'
import sortBooksHightoLow from './sortBooksHightoLow.vue'
import DisplayBooks from './DisplayBooks.vue'
export default {
    components: {
        DisplayBooks,sortBooksLowtoHigh,sortBooksHightoLow      
    },
    data() {
        return {
           flag:true,
            brand:'Bookstore',
        }
    },
    methods:{
        flip() {
            this.flag = !this.flag;
        },
        applyOption(evt) {
            if(evt.target.value === 'HightoLow') this.flag = true;
            if(evt.target.value==='LowtoHigh') this.flag=true;
            else this.flag = false;
        },
    }

}
</script>

<style lang="scss" scoped>
    @import "@/styles/Dashboard.scss";
</style>


 

Ответ №1:

Показывать книги отображения, когда флаг имеет значение true, и наоборот для sortBooksLowtoHigh

  <select class="options" @change="applyOption">
            <option disabled value="">Sort by relevance</option>
            <option value="HighToLow">price:High to Low</option>
            <option value="LowToHigh">price:Low to High</option>
 </select>
 

и

 <DisplayBooks v-show="flag" />
<sortBooksLowtoHigh v-show="!flag" /> 
 

а потом в

 data() {
        return {
            flag:true,
            brand:'Bookstore',
        }
    },
methods:{
        applyOption(evt) {
            if(evt.target.value === "HightoLow") this.flag = true;
            else this.flag = false;
        },
    }
 

Обратите внимание, что его методы, а не метод

Редактировать:

Если вы собираетесь импортировать новый компонент «sortBookHightoLow.vue», поэтому, исходя из ваших требований, вы можете вместо установки логического значения для флага задать для него текст. Пожалуйста, проверьте код ниже

  <select class="options" @change="applyOption">
            <option disabled value="">Sort by relevance</option>
            <option value="HighToLow">price:High to Low</option>
            <option value="LowToHigh">price:Low to High</option>
 </select>
 

и

 <DisplayBooks v-show="flag==='noOrder'" />
<sortBooksLowtoHigh v-show="flag==='lowToHigh'" /> 
<sortBooksHightoLow v-show="flag==='highToLow'" /> 
 

а потом в

 data() {
        return {
            flag:'noOrder',
            brand:'Bookstore',
        }
    },
methods:{
        applyOption(evt) {
            if(evt.target.value === "HightoLow") this.flag = 'highToLow';
            else this.flag ='lowToHigh';
        },
    }
 

Комментарии:

1. Большое спасибо ,@Amaarrockz, все работает нормально, но в разделе vlaue =» » в вашем ответе отсутствуют двойные кавычки.

2. Да, я исправил это, Кстати, если мой ответ помог, пожалуйста, примите и поддержите его…спасибо 🙂

3. это супер рабочий твой ответ , мне нравится, как ты пишешь и объясняешь

4. у меня есть еще одно сомнение, не могли бы вы, пожалуйста, помочь мне .@ Amaarrockz

5. Отлично, рад, что помогло