2016-11-07 3 views
2

Kann mir jemand helfen, dynamische V-Modellwerte zu generieren?Dynamisches V-Modell in vue.js

<div v-for="car in cars"> 
    <div class="row"> 
    <div class="col-md-2"> 
     <p v-model="car.attr_1">{{ car.attr_1 }}</p> 
    </div> 
    <div class="col-md-3"> 
     <p v-model="car.attr_2">{{ car.attr_2 }}</p> 
    </div> 
    <div class="col-md-2"> 
     <p v-model="car.attr_3">$ {{ car.attr_3 }}</p> 
    </div> 
    <div class="col-md-2"> 
     <p><input type="text" class="" placeholder="Quantity" v-on:click="addCar(car)"/></p> 
    </div> 
    </div> 
</div> 


<script> 

module.exports = { 

    data: function() { 
    return { 
     cars: '' 
    } 
    }, 

    methods: { 

    getCars: function() { 

     var self = this; 

     $.ajax({ 
     type: "GET", 
     url: '/api/cars', 
     success: function(data) { 
      self.cars = data; 
     } 
     }); 
    } 
    } 
} 

</script> 

Beispiel JSON-Antwort - man beachte, wie alle Eigenschaften unterschiedlich sind ..:

cars: [ 

    { 
    make: 'Audi', 
    model: 'R8', 
    color: 'red' 
    }, 

    { 
    make: 'Chevy', 
    tires: 'All Season', 
    weight: 30 
    }, 

    { 
    make: 'Chevy', 
    tires: 'Summer', 
    color: 'black' 
    }, 

    { 
    make: 'Ford', 
    weight: 40, 
    gps: true 
    } 


] 

ich einen Ajax-Aufruf haben, die ein Array von cars Objekten zurückgibt. Das Problem besteht darin, dass alle zurückgegebenen Objekte über variable Attribute verfügen. Wie kann also vue.js mit diesen Variablenattributen für v-model umgehen? Ich habe Dinge wie v-model="car[ {{attr_1}} ]" versucht, aber diese alle zurück Fehler .. Kann jemand helfen?

Vielen Dank im Voraus!

+1

Können Sie fügen Autos Objekt von Ajax Anruf zurück. – Saurabh

+0

Sorry, ich verstehe nicht. Was meinen Sie? –

+0

Ich denke er meint, wie 'Autos' aussehen? Bitte fügen Sie der Frage ein JSON-Beispiel der Antwort von Ihrem Ajax-Aufruf bei. – PatrickSteele

Antwort

2

Sie können es so etwas wie:

<div v-for="car in cars"> 
    <div class="row"> 
    <div class="col-md-2" v-if="car.make"> 
     <p v-model="car.make">{{ car.make }}</p> 
    </div> 
    <div class="col-md-3" v-if="car.tires"> 
     <p v-model="car.tires">{{ car.tires }}</p> 
    </div> 
    <div class="col-md-2" v-if="car.color"> 
     <p v-model="car.color">$ {{ car.color }}</p> 
    </div> 
    <div class="col-md-2"> 
     <p><input type="text" class="" placeholder="Quantity" v-on:click="addCar(car)"/></p> 
    </div> 
    </div> 
</div> 

Alternativ können Sie auch eine Methode schreiben, die car Objekt und Attribut angegeben werden entsprechende Wert zurückgeben:

function(car, attr){ 
    return car[attr]; 
}