Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 每次计算的方法被称为Vuejs时都添加一个加载器_Javascript_Html_Vue.js - Fatal编程技术网

Javascript 每次计算的方法被称为Vuejs时都添加一个加载器

Javascript 每次计算的方法被称为Vuejs时都添加一个加载器,javascript,html,vue.js,Javascript,Html,Vue.js,我有一个过滤方法,每次选中复选框都会进行过滤。我想在单击复选框进行筛选时添加一个加载程序,然后显示方法的结果。下面显示了我尝试过的内容,但加载程序始终保持不变 HTML 模板 <div v-if="load" class="lds-dual-ring"></div> <div v-else> <div class="col-xl-3 col-lg-4 col-md-6 col-sm-6 col

我有一个过滤方法,每次选中复选框都会进行过滤。我想在单击复选框进行筛选时添加一个加载程序,然后显示方法的结果。下面显示了我尝试过的内容,但加载程序始终保持不变

HTML

模板

 <div v-if="load" class="lds-dual-ring"></div>
 <div v-else>
    <div class="col-xl-3 col-lg-4 col-md-6 col-sm-6 col-9" v-for="product in computedProducts">
        <img :src="product.photo.url" alt="" class="main_img">
    
            <p>{{ product.name }}</p> 
            <div class="hover">
                <p>{{ product.name }}</p>
                <a :href="product.document.url"><img src="img/pdf_icon_white.svg" alt=""></a>
                <p>Factsheet als PDF downloaden</p>
           </div>
        </div>
    </div>

在JavaScript中过滤数组的时间不应超过几毫秒。为什么要显示加载指示器?我知道,但我必须添加加载程序。有没有办法延迟过滤并添加加载程序?我还是不明白。你为什么需要加载器?这是一个非常糟糕的设计,会造成糟糕的用户体验。如果此代码对您有所帮助,请对其进行评级,Thanks FilteredProducts是computed属性中的一个方法,每次选中复选框并过滤产品时,它都会加载。我无法在方法上编写它您可以在单击所需元素
v-on=“funName()”
后运行函数。我是从你的密码里发现的。我希望您已经使用了它。当我执行v-on=“filteredProducts()”时,它抛出“无参数v-on预期对象值”错误
var app = new Vue({
    el:'#app',
    data: {
        load: false,

    },
computed:{
        filteredProducts(){
            setTimeout(() => this.load = true , 1000)
            if(!this.checkedCountries.length){
                return this.products
            }
            const filtered_products= this.products.filter( product => this.checkedCountries.includes(product.categories[0].name))
            if(this.checkedCountries.length && !filtered_products.length){
                this.message = "There are no products to show"
            }else{
                this.message = null
            }
            return filtered_products
        },
 computedProducts(){
            if(this.pages === 1){
                return this.filteredProducts
                 
            }else{
                const firstIndex = (this.page -1) * this.perPage
                const lastIndex = this.page * this.perPage
                window.scrollTo(0,0)
                
               return this.filteredProducts.slice(firstIndex,lastIndex)
                
            }
        },
}
 <div v-if="load" class="lds-dual-ring"></div>
 <div v-else>
    <div class="col-xl-3 col-lg-4 col-md-6 col-sm-6 col-9" v-for="product in computedProducts">
        <img :src="product.photo.url" alt="" class="main_img">
    
            <p>{{ product.name }}</p> 
            <div class="hover">
                <p>{{ product.name }}</p>
                <a :href="product.document.url"><img src="img/pdf_icon_white.svg" alt=""></a>
                <p>Factsheet als PDF downloaden</p>
           </div>
        </div>
    </div>
methods : {
    
    filteredProducts : function() {
    
    // some code
    
    this.load =  // true or // false
    
    }
 }