<div id="app">
  <div class="container-fluid">
    <div class="row align-items-center justify-content-center">
      <label>Show All Macros</label>
      <input type="checkbox" v-model="showDetailView" style="margin-left: 10px;" />
    </div>
    <div class="row">
      <div>
        <table id="table" class="table">
          <thead>
            <tr>
              <td v-for="h in tableHeaders" :key="h.value">{{h.text}}</td>
            </tr>
          </thead>
          <tbody>
            <tr v-for="(row, index) in rows" :key="row.name">
              <td v-for="header in headers">
                {{ row[header.value] }}
              </td>
            </tr>
          </tbody>
        </table>
      </div>
    </div>
  </div>
</div>
#table thead {
  background-color: #abcdef;
}
label {
  font-size: 20px;
  color: tomato;
}
new Vue({
  el: "#app",
  computed: {
    tableHeaders() {
      if (!this.showDetailView) {
        return this.headers.filter((h) =>
          this.defaultHeaders.includes(h.value)
        );
      } else {
        return this.headers;
      }
    },
    rows() {
      if (this.showDetailView) {
        //console.log("should return all foods", this.foods);
        return this.foods;
      } else {
        let data = this.foods.map((f) => {
          let obj = {};
          this.defaultHeaders.forEach((key) => (obj[key] = f[key]));
          return obj;
        });
        console.log(" data :", data);
        return data;
      }
    }
  },
  data() {
    return {
      showDetailView: false,
      defaultHeaders: ["name", "calories", "protein"],
      headers: [
        {
          text: "Food (100g serving)",
          value: "name"
        },
        {
          text: "Calories",
          value: "calories"
        },
        {
          text: "Protein (g)",
          value: "protein"
        },
        {
          text: "Fat (g)",
          value: "fat"
        },
        {
          text: "Carbs (g)",
          value: "carb"
        },

        {
          text: "Fiber (g)",
          value: "fiber"
        }
      ],
      foods: [
        {
          name: "Chicken",
          carb: 0,
          fat: 14,
          protein: 27,
          fiber: 0,
          calories: 234
        },
        {
          name: "Egg",
          carb: 0,
          fat: 14,
          protein: 27,
          fiber: 0,
          calories: 234
        },

        {
          name: "Oats",
          carb: 66.27,
          fat: 6.9,
          protein: 16.89,
          fiber: 10.6,
          calories: 394.74
        },

        {
          name: "Sprouts",
          carb: 5.94,
          fat: 0.18,
          protein: 3.04,
          fiber: 1.8,
          calories: 37.54
        },
        {
          name: "White rice",
          carb: 44.08,
          fat: 0.44,
          protein: 4.2,
          fiber: 0.6,
          calories: 197.08
        },
        {
          name: "Toor dal",
          carb: 26.18,
          fat: 6.32,
          protein: 10.36,
          fiber: 8.7,
          calories: 203.04
        },
        {
          name: "Curd",
          carb: 3.45,
          fat: 4.2,
          protein: 11.75,
          fiber: 0,
          calories: 98.6
        },
        {
          name: "Soya chunks",
          carb: 15,
          fat: 0,
          protein: 24,
          fiber: 2,
          calories: 156
        },
        {
          name: "Tofu",
          carb: 1.9,
          fat: 5,
          protein: 16,
          fiber: 1,
          calories: 116.6
        },
        {
          name: "Prawn",
          carb: 2,
          fat: 0,
          protein: 24,
          fiber: 1,
          calories: 104
        },

        {
          name: "Fish",
          carb: 0,
          fat: 12,
          protein: 22,
          fiber: 1,
          calories: 196
        },
        {
          name: "Egg White",
          carb: 0.7,
          fat: 0,
          protein: 4,
          fiber: 0,
          calories: 18.8
        },
        {
          name: "Crab",
          carb: 0,
          fat: 0.7,
          protein: 18,
          fiber: 0,
          calories: 78.3
        },
        {
          name: "Sweet Potato",
          carb: 20,
          fat: 0.1,
          protein: 1.6,
          fiber: 3,
          calories: 87.3
        },
        {
          name: "Yam",
          carb: 28,
          fat: 0.2,
          protein: 1.5,
          fiber: 4.1,
          calories: 119.8
        },
        {
          name: "Carrot",
          carb: 10,
          fat: 0.2,
          protein: 1,
          fiber: 2.8,
          calories: 45.8
        }
      ]
    };
  }
});
View Compiled

External CSS

  1. https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/css/bootstrap.min.css

External JavaScript

  1. https://cdn.jsdelivr.net/npm/babel-polyfill/dist/polyfill.min.js
  2. https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js
  3. https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.min.js
  4. https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js