【问题标题】:How to assign a random value to a data attribute from a given array during v-for in Vue.js?如何在Vue.js中的v-for期间为给定数组中的数据属性分配随机值?
【发布时间】:2020-02-13 13:44:06
【问题描述】:

在我的主 Vue 实例上,我有一个数据属性,它是一个数组。它有 4 项:

var app = new Vue({
            el: '#app',
            efeitosAos: ['fade', 'flip-up', 'slide-up', 'zoom-in'],
            aos: 'fade-in'
}

如您所见,它具有来自AOS 库的效果名称。我的想法是从中获取一个随机值并将其传递给我的一个组件。

每个组件都在 v-for 中调用:

<post v-for="post, index in posts" :key="post.id" :post="post" :efeito="aos">
    {{randomizaAos()}}
</post>

这是我的组件:

const post = {
   data: function(){
        return {
            duration: 1000,
            delay: 50,
        }
    },

    props: {
        efeito: '',
        post: {
            id: '',
            titulo: '',
            resumo: '',
            imagem: '',
        },
    },
    template: '\
        <section class="guarda-post" :data-aos="efeito" :data-aos-duration="duration" :data-aos-delay="delay">\
        <img :src="post.imagem" class="img-fluid">\
        <h4 class="titulo-post">{{post.titulo}}</h4>\
        <p>{{post.resumo}}</p>\
        </section>'
};

在我的组件上,我有一个名为 efeitoprop。它应该接收我的数据 aos 的值,该值来自我的 主 Vue 实例。我的想法是使用一种方法来更改此 aos 数据。到目前为止,我得到了这个:

methods:{
        randomizaAos: function(){
           var efeitoAleatorio = Math.floor(Math.random() * this.efeitosAos.length);
           this.aos = this.efeitosAos[efeitoAleatorio];
           console.log(this.aos);
        }
}

问题是当我运行 randomizaAos 方法时,我得到一个无限循环,我不知道为什么。这很奇怪,因为如果我只将 console.log 留在方法中,我会收到 4 条消息,这正是我的 posts 数组的大小。但是当我使用数学的东西并将找到的值提供给我的aos数据时,我得到了无限循环。这是为什么?有什么帮助吗?

【问题讨论】:

  • post 未声明为 vue 组件
  • 是的,我只是没有把我的主Vue实例的所有内容都放好。
  • 为什么不在mounted方法中使用randomizaAos()
  • Mounted 只会运行一次,对吧? v-for 的每次迭代我都需要一个新的随机值。如果我在组件内部执行了挂载方法(这解决了问题),我不能在我的其他组件上使用 randomizaAos 函数。

标签: javascript vue.js


【解决方案1】:

在mounted方法中设置efeito prop的值,不会每次都重新渲染

【讨论】:

  • mount 不会只给我一个值吗?每次 v-for 的交互时,我都需要一个新的 efeito 随机值。
猜你喜欢
  • 2017-07-30
  • 2018-05-24
  • 2019-02-08
  • 2019-05-17
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 2020-11-14
相关资源
最近更新 更多