You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js表格v-for开发:根据巴士分配数据切换按钮显示状态

解决方案:根据巴士分配状态动态切换按钮文本

我来帮你搞定这个需求!你只需要添加一个简单的判断逻辑,就能根据assignedBus的数据动态显示不同的按钮文本,具体实现步骤如下:

1. 添加判断方法到Vue实例

在你的Vue实例中,新增一个方法用来检查当前时间段是否已经分配了巴士:

new Vue({
  el: '#app',
  data: {
    timeDurations: [
      { 'duration': '02:30 AM - 03:00 AM' },
      { 'duration': '03:00 AM - 03:30 AM' },
      { 'duration': '03:30 AM - 04:00 AM' },
      { 'duration': '04:00 AM - 04:30 AM' },
      { 'duration': '04:30 AM - 05:00 AM' },
      { 'duration': '05:00 AM - 05:30 AM' },
      { 'duration': '05:30 AM - 06:00 AM' }
    ],
    assignedBus: [
      { 'duration': '03:00 AM - 03:30 AM', 'bus': 'Bus1' },
      { 'duration': '04:00 AM - 04:30 AM', 'bus': 'Bus2' },
      { 'duration': '05:00 AM - 05:30 AM', 'bus': 'Bus3' }
    ]
  },
  methods: {
    isBusAssigned(duration) {
      // 查找当前时间段是否在已分配列表中,找到匹配项就停止遍历
      return this.assignedBus.some(item => item.duration === duration);
    }
  }
});

2. 修改模板中的按钮逻辑

把表格里的按钮部分改成根据判断结果动态显示文本,同时给v-for添加:key属性(Vue列表渲染的最佳实践):

<table class="table table-striped table-bordered table-hovered">
  <thead>
    <tr>
      <th>Time Duration</th>
      <th>Action</th>
    </tr>
  </thead>
  <tbody>
    <tr v-for="time in timeDurations" :key="time.duration">
      <td>{{time.duration}}</td>
      <td>
        <button class="btn btn-primary">
          {{ isBusAssigned(time.duration) ? 'View Bus' : 'Assign Bus' }}
        </button>
      </td>
    </tr>
  </tbody>
</table>

额外优化(可选)

如果后续assignedBus数据量较大,你可以把它转换成以时间段为键的对象,让查找速度更快(时间复杂度从O(n)降到O(1)):

new Vue({
  el: '#app',
  data() {
    const assignedBusList = [
      { 'duration': '03:00 AM - 03:30 AM', 'bus': 'Bus1' },
      { 'duration': '04:00 AM - 04:30 AM', 'bus': 'Bus2' },
      { 'duration': '05:00 AM - 05:30 AM', 'bus': 'Bus3' }
    ];
    return {
      timeDurations: [
        { 'duration': '02:30 AM - 03:00 AM' },
        { 'duration': '03:00 AM - 03:30 AM' },
        { 'duration': '03:30 AM - 04:00 AM' },
        { 'duration': '04:00 AM - 04:30 AM' },
        { 'duration': '04:30 AM - 05:00 AM' },
        { 'duration': '05:00 AM - 05:30 AM' },
        { 'duration': '05:30 AM - 06:00 AM' }
      ],
      // 转换为键值对形式的映射
      assignedBusMap: Object.fromEntries(assignedBusList.map(item => [item.duration, item.bus]))
    };
  },
  methods: {
    isBusAssigned(duration) {
      // 直接通过键查找是否存在
      return !!this.assignedBusMap[duration];
    }
  }
});

内容的提问来源于stack exchange,提问作者Codeblooded Saiyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:32:41