使用vue.js

时间:2018-06-12 02:30:26

标签: javascript vue.js vuetify.js

我正在进行投票申请。我想在点击投票按钮后禁用该按钮。如何禁用按钮。

模板

  <v-btn
   v-for="choice in data.choices"
   @click="doVote(choice.id)"
   color="success"
   v-bind:key="choice.id">
   votes: {{ choice.votes }}
  </v-btn>

脚本

  data () {
    return {
      vote: null,
      questions: [],
    }
  },

  methods: {
    fetchData () {
      this.$request.questions.list().then(res => {
        this.questions = res.data.results
      })
    },

    // add votes
    doVote (vote) {
      if (!vote) {
        return
      }
      this.$request.questions.vote(vote).then(res => {
        this.fetchData()
      })
    },

  mounted () {
    this.fetchData()
  },

4 个答案:

答案 0 :(得分:4)

v-btndisabled property你可以使用;一种方法是创建一个clicked字段来记录您点击的所有按钮,并检查特定按钮是否在点击的数组中:

<v-btn
   :disabled="clicked.includes(choice.id)"
   v-for="choice in data.choices"
   @click="doVote(choice.id)"
   color="success"
   v-bind:key="choice.id">
   votes: {{ choice.votes }}
</v-btn>

data中,将clicked初始化为空数组:

data () {
    return {
      vote: null,
      questions: [],
      clicked: []
    }
  }

然后在doVote方法中,在事件触发时将choice.id推送到clicked数组:

doVote (vote) {
  this.clicked.push(vote)
  if (!vote) {
    return
  }
  this.$request.questions.vote(vote).then(res => {
    this.fetchData()
  })
}

答案 1 :(得分:1)

最简单的方法是在按下投票按钮时设置一个变量,然后将其绑定到按钮的“ disabled”属性:

v-bind:disabled =“ hasVoted”

答案 2 :(得分:0)

您可以添加另一个变量(在这种情况下为votes),该变量将记录投票,然后您可以使用它来确定是否应禁用该按钮(请参阅votes.indexOf(choice.id) !== -1)。

模板:

  <v-btn
   :disabled="votes.indexOf(choice.id) !== -1"
   v-for="choice in data.choices"
   @click="doVote(choice.id)"
   color="success"
   v-bind:key="choice.id">
   votes: {{ choice.votes }}
  </v-btn>

脚本

  data () {
    return {
      votes: [],
      vote: null,
      questions: [],
    }
  },

  methods: {
    fetchData () {
      this.$request.questions.list().then(res => {
        this.questions = res.data.results
      })
    },

    // add votes
    doVote (vote) {
      if (!vote) {
        return
      }
      this.$request.questions.vote(vote).then(res => {
        this.fetchData()
        this.votes.push(vote);
      })
    },

  mounted () {
    this.fetchData()
  },

答案 3 :(得分:0)

我偶然发现了一个相同的问题,我想分享一下如何解决我的问题,这将再次包括创建另一个数组来记录您的点击次数,如之前的答案中所述,然后使用Array.prototype.some() method确定哪个通过绑定v-btn组件的禁用道具来禁用按钮,如下所示:

<template>
  <v-btn
   :disabled="votes.some(vote => vote.id === choice.id)"
   v-for="choice in data.choices"
   @click="doVote(choice.id)"
   color="success"
   v-bind:key="choice.id">
   votes: {{ choice.votes }}
  </v-btn>
</template>

我必须在我找到解决方案的SO question上参考迈克尔的回答