Vue.js 绑定(bind)列表中每个项目的样式(类)与 v-for 依赖于项目数据

标签 vue.js vuejs2 v-for

我有一个 vue 对象,其中包含一组项目作为数据(在我的例子中是飞行计划)。 到目前为止,列表已正确呈现。

问题来了。我想在使用 v-for 迭代到列表中的每个项目(飞行计划)时应用不同的样式,具体取决于当前迭代的飞行计划成员 fplType 的值。 目前所有列表项(飞行计划)都获得类 flightplan-list-ifr-dep

但我需要类似(伪代码)的东西:

<li v-for="flightplan in flightplans"
    v-bind:id="flightplan.id"                        
    v-bind:class="{
      flightplan-list-ifr-dep: flightplan.fplType === 'departure',
      flightplan-list-ifr-arr: flightplan.fplType === 'arrival'
    }"
>

因此每个项目都根据当前迭代飞行计划的 fplType 应用自己的类。

<div id="flightplan-list-area" class="flightplan-list-area-style">
  <ul>
    <li v-for="flightplan in flightplans"
      v-bind:id="flightplan.id"
      @click="selected(flightplan, $event)">
      <div class="flightplan-list-ifr-dep">
          <p class="flightplan-list-ifr-dep-callsign">{{ flightplan.callsign }}</p>
          <p class="flightplan-list-ifr-dep-aircraft-type">{{ flightplan.aircraft_type }}</p>
          <p class="flightplan-list-ifr-dep-aircraft-wtc">{{ flightplan.aircraft_wtc }}</p>
      </div>
    </li>
   </ul>
</div>


<script lang="javascript"> 
var vue_FLIGHTPLAN_MODEL = new Vue({
  el: "#flightplan-list-area",

  data: {
    flightplans: [],
    selected_flightplan_element: null,
  },
});
</script>

最佳答案

你的语法几乎是正确的,但由于你的类名包含“-”字符,你只需要在 v-bind:class 中引用它们:

...
v-bind:class="{
    'flightplan-list-ifr-dep': flightplan.fplType === 'departure',
    'flightplan-list-ifr-arr': flightplan.fplType === 'arrival'
}"
...

现场演示

var vue_FLIGHTPLAN_MODEL = new Vue({
  el: "#flightplan-list-area",

  data: {
    flightplans: [
      { id: 1, callsign: 'ABC', aircraft_type: 'Boeing 737', aircraft_wtc: 'xyz', fplType: 'departure' },
      { id: 2, callsign: 'DEF', aircraft_type: 'Boeing 737', aircraft_wtc: 'uvw', fplType: 'arrival' },
      { id: 3, callsign: 'HIJ', aircraft_type: 'Boeing 737', aircraft_wtc: 'abc', fplType: 'departure' },
    ],
    selected_flightplan_element: null,
  },
  
  methods: {
    selected (plan, e) {
      this.selected_flightplan_element = plan;
    }
  },
});
li.flightplan-list-ifr-dep {
  color: blue;
}

li.flightplan-list-ifr-arr {
  color: green;
}
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

<div id="flightplan-list-area" class="flightplan-list-area-style">
  <ul>
    <li v-for="flightplan in flightplans"
                v-bind:id="flightplan.id"
                v-bind:class="{
                        'flightplan-list-ifr-dep': flightplan.fplType === 'departure',
                        'flightplan-list-ifr-arr': flightplan.fplType === 'arrival'
                    }"
                @click="selected(flightplan, $event)">
                <div class="flightplan-list-ifr-dep">
                    <p class="flightplan-list-ifr-dep-callsign">{{ flightplan.callsign }}</p>
                    <p class="flightplan-list-ifr-dep-aircraft-type">{{ flightplan.aircraft_type }}</p>
                    <p class="flightplan-list-ifr-dep-aircraft-wtc">{{ flightplan.aircraft_wtc }}</p>
                </div>
            </li>
   </ul>
</div>

关于Vue.js 绑定(bind)列表中每个项目的样式(类)与 v-for 依赖于项目数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50014659/

相关文章:

javascript - "mount"在 Vue.js 中是什么意思?

vuejs2 - 在 vuex 商店中通过 axios 发布后进行重定向的正确方法

typescript - Vue v-for 不更新,即使设置了

vue.js - 使用 VUE 的未知自定义元素

javascript - 组件函数仅适用于第一个组件 Vue.js

vue.js - 在 vuejs 中限制 v-for 循环的元素渲染

javascript - VueJS - 如何在脚本标签中获取单个文件组件的实例

Vue.js、Vuex、Vue-Router SPA 以及扩展应用程序客户端与服务器端

javascript - 替换整个 vue.js 容器

javascript - 如何用换行符替换值并以 b-modal 形式显示它(带换行符)