簡體   English   中英

Vue v-for后條件,使用vuex

[英]Vue v-for after condition using vuex

在嘗試創建表單時,遇到了這個問題,我沒有任何解決方案。 在Vehicles Make和Vehicle Model上有Vuex數據,現在一旦選擇了Make,我希望其他表單可以循環遍歷所選的Make並找到其他模型……類似的東西。

這是我到目前為止所做的:

cars.js-(Vuex模塊)

const state = {
  make: [
   {
    name: 'Audi',
    carid: '1',
    models: [
     {
     modelid: '1.1',
     name: 'A7',
     },
     {
     modelid: '1.2',
     name: 'A8',
     },
    ],
   },
   {
   name: 'BMW',
   carid: '2',
   models: [
    {
    modelid: '2.1',
    name: '5 Series',
    },
    {
    modelid: '2.2',
    name: '7 Series',
    },
   ],
   },
 ],
}

賽車

<template>
<div class="labelos">
              <div class="label-name">
                <h4>Car make:</h4>
              </div>
              <div class="label-body">
                <label for="car-make">
                  <select v-model="selectedType" name="carmake" required>
                    <option value=""></option>
                    <option  v-for="(cars, index) in cars.make" :key="index" :value="cars.carid">{{ cars.name }}</option>
                  </select>
                </label>
              </div>
            </div>
            <div class="labelos">
              <div class="label-name">
                <h4>Car model:</h4>
              </div>
              <div class="label-body">
                <label for="car-model">
                  <select>
                    <option value=""></option>
                    <option v-for="(model, index) in cars.make" :key="index" :value="cars.carid">{{ model.carid }}</option>
                  </select>
                </label>
                Model:
              </div>
            </div>
    </template>
<script>
import { mapState } from 'vuex';
export default {
  name: 'cars',
  data() {
    return {
      selectedType: '',
      selectedCity: '',
    };
  },
  methods: {

  },
  components: {
    Headers,
    Footers,
  },
  computed: {
    ...mapState([
      'cities', 'cars',
    ]),
  },
};
</script>

因此,正如您在第一個標簽上看到的那樣,我正在遍歷制造商,一旦選擇了汽車制造商,則將carid保存在selectedType上,那么根據該選擇如何加載第二個下拉菜單,因此如果選擇了carid 1,列表將加載給定carid上可用的汽車模型(在本示例中為carid 1)

期待收到別人的來信,我被困在這里..我不知道如何解決此問題...到目前為止,我已經做到了

干杯

您應該創建一個計算出的屬性,該屬性將根據所選制造類型的值返回模型選項。 然后,您可以綁定到該文件,並且只要選定進行更改,它將自動更新:

models() {
  if (this.selectedType) {
    return this.cars.make.find((car) => car.carid === this.selectedType).models;
  }
}

這是一個工作示例:

 const store = new Vuex.Store({ state: { cars: { make: [{ name: 'Audi', carid: '1', models: [ { modelid: '1.1', name: 'A7' }, { modelid: '1.2', name: 'A8' }, ] }, { name: 'BMW', carid: '2', models: [ { modelid: '2.1', name: '5 Series' }, { modelid: '2.2', name: '7 Series' } ], }] } } }) new Vue({ el: '#app', store, data() { return { selectedType: '', }; }, computed: { ...Vuex.mapState(['cars']), models() { if (this.selectedType) { return this.cars.make.find((car) => car.carid === this.selectedType).models; } } }, }) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.3/vue.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/vuex/3.0.1/vuex.min.js"></script> <div id="app"> <h4>Car make:</h4> <select v-model="selectedType" name="carmake" required> <option value=""></option> <option v-for="(cars, index) in cars.make" :key="index" :value="cars.carid">{{ cars.name }}</option> </select> <h4>Car model:</h4> <select> <option value=""></option> <option v-for="(model, index) in models" :key="index" :value="model.modelid">{{ model.name }}</option> </select> </div> 

使用數據的示例:

 const state = { make: [ { name: 'Audi', carid: '1', models: [ {modelid: '1.1', name: 'A7'}, {modelid: '1.2', name: 'A8'} ] }, { name: 'BMW', carid: '2', models: [ {modelid: '2.1', name: '5 Series'}, {modelid: '2.2', name: '7 Series'} ] } ] } new Vue({ el: '#app', data: { state: state, selected: 0 }, computed: { models () { var maker = this.state.make.find(m => m.carid === this.selected) return maker ? maker.models : [] } } }) 
 <div id="app"> <select v-model="selected"> <option value="0" selected>Choose maker</option> <option v-for="maker in state.make" :key="maker.carid" :value="maker.carid" >{{ maker.name }}</option> </select> <br> <select> <option value="0" selected>Select model</option> <option v-for="model in models" :key="model.modelid" :value="model.modelid" >{{ model.name }}</option> </select> </div> <script src="https://unpkg.com/vue@2.5.3/dist/vue.min.js"></script> 

如果可以,請至少將'modelid'更改為簡單整數-1、2等。 並且,如果可以並且知道如何做,請更改數據結構-將制造商和模型划分為單獨的數組/對象。

這是您要完成的特定任務的插件: vue-dependon

它沒有更新1-2年,但我認為您可以檢查其源代碼並查看其工作方式。

更新
您需要的源代碼就是loadOptions函數以及L83和L105之間的代碼。
您可以使該代碼適合您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM