当前位置:首页 > VUE

vue实现投票

2026-01-08 03:39:28VUE

Vue实现投票功能

数据准备

在Vue组件的data中定义投票相关数据,包括选项列表和当前选中状态:

data() {
  return {
    options: [
      { id: 1, text: '选项A', votes: 0 },
      { id: 2, text: '选项B', votes: 0 },
      { id: 3, text: '选项C', votes: 0 }
    ],
    selectedOption: null,
    hasVoted: false
  }
}

模板渲染

使用v-for渲染投票选项,v-model绑定选中状态:

<div v-for="option in options" :key="option.id">
  <input 
    type="radio" 
    :id="'option'+option.id" 
    :value="option.id" 
    v-model="selectedOption"
    :disabled="hasVoted">
  <label :for="'option'+option.id">{{ option.text }}</label>
  <span v-if="hasVoted">(得票: {{ option.votes }})</span>
</div>

投票逻辑

添加投票方法,处理投票提交:

methods: {
  submitVote() {
    if (!this.selectedOption || this.hasVoted) return

    const selected = this.options.find(opt => opt.id === this.selectedOption)
    if (selected) {
      selected.votes++
      this.hasVoted = true
      // 可添加API调用保存投票结果
    }
  }
}

结果展示

添加投票按钮和结果显示:

<button @click="submitVote" :disabled="!selectedOption || hasVoted">
  {{ hasVoted ? '已投票' : '提交投票' }}
</button>

<div v-if="hasVoted">
  <h3>投票结果</h3>
  <ul>
    <li v-for="option in options" :key="option.id">
      {{ option.text }}: {{ option.votes }}票
    </li>
  </ul>
</div>

样式优化

添加基础CSS样式增强用户体验:

div {
  margin: 10px 0;
}
button {
  padding: 8px 16px;
  background: #42b983;
  color: white;
  border: none;
  border-radius: 4px;
}
button:disabled {
  background: #ccc;
}

持久化存储

如需保存投票结果到后端,可添加axios请求:

import axios from 'axios'

methods: {
  async submitVote() {
    // ...原有逻辑
    try {
      await axios.post('/api/vote', { 
        optionId: this.selectedOption 
      })
    } catch (error) {
      console.error('保存投票失败', error)
    }
  }
}

vue实现投票

标签: vue
分享给朋友:

相关文章

vue实现点击样式

vue实现点击样式

Vue 实现点击样式的方法 在 Vue 中实现点击样式可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-bind:class 动态绑定类名 通过数据驱动的方式动态切换类名,结合…

vue实现屏幕共享

vue实现屏幕共享

Vue 实现屏幕共享的方法 使用 WebRTC 和 getDisplayMedia API 通过 navigator.mediaDevices.getDisplayMedia 捕获屏幕内容,结合 We…

vue实现sql操作

vue实现sql操作

在Vue中实现SQL操作通常需要结合后端服务或本地数据库技术,因为前端JavaScript无法直接连接SQL数据库。以下是几种常见的实现方式: 通过API与后端交互 Vue前端通过HTTP请求(如a…

vue点击实现排序

vue点击实现排序

实现点击排序的方法 在Vue中实现点击排序功能,可以通过以下几种方式完成: 使用计算属性结合排序方法 定义一个响应式数据存储排序状态,通过计算属性动态返回排序后的数组。点击事件切换排序状态。…

vue实现按卡片轮播

vue实现按卡片轮播

实现卡片轮播的基本思路 在Vue中实现卡片轮播可以通过结合v-for指令和动态样式绑定完成。核心是维护一个当前显示卡片的索引,通过CSS过渡效果实现平滑切换。 基础实现步骤 模板部分 使用v-for…

vue实现列表显示

vue实现列表显示

Vue 实现列表显示的方法 在 Vue 中实现列表显示通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式。 基本列表渲染 通过 v-for 指令遍历数组,动态生成…