2017-08-09 4 views
0

Ich habe 3 Eingabefelder (Vorname, Midname, Nachname), die ich mit V-für jeden Client erstellt habe. Jedes Mal, wenn sich der Clientname ändert, möchte ich eine aktualisierte Version des Namens in einem Objekt als Zeichenfolge generieren.Generieren einer Zeichenfolge aus 3 Eingabefeldern

<input :data-index="index" data-field="first-name" @keyup="nameUpdated"> 
<input :data-index="index" data-field="middle-name" @keyup="nameUpdated"> 
<input :data-index="index" data-field="last-name" @keyup="nameUpdated"> 

Dies ist die Methode, die ich von, wo Index die Client-Anzahl ist. Aber dann dachte ich, dass das nicht der richtige Weg ist. Wie ich darüber nachdachte auf nameUpdated Funktion, speichern Client Vorname, midname und Nachname als Objekt war und dann reorganisieren es mag:

client[1][first-name]' + ' ' + client[1][middle-name]' + ' ' + client[1][last-name]'

Was ist der richtige Weg, um eine solche Aufgabe, dies zu erreichen?

+2

eine berechnete Eigenschaft Verwenden https://vuejs.org/v2/guide/computed.html – thanksd

+0

So Sie speichern es als ein Objekt wie 'Client sagen [1] [Vorname] : John, client [1] lastname]: Doe' etc und benutze berechnete Eigenschaft für jede Komponente, die ich es nennen werde? – senty

+0

Oder Sie können einen Watcher verwenden, um es manuell zu aktualisieren. – kevguy

Antwort

1

Eine berechnete Eigenschaft ist mehr als genug, um den Trick zu machen.

const app = new Vue({ 
 
    el: '#app', 
 
    data: { 
 
    clientList: [{ 
 
     firstName: 'John', 
 
     midName: '.', 
 
     lastName: 'Doe' 
 
    }] 
 
    }, 
 
    computed: { 
 
    fullList() { 
 
     return this.clientList 
 
     .map((client) => `${client.firstName} ${client.midName} ${client.lastName}`) 
 
    } 
 
    }, 
 
    methods: { 
 
    addList(){ 
 
     this.clientList.push({ 
 
     firstName: '', 
 
     midName: '', 
 
     lastName: '' 
 
     }); 
 
    } 
 
    } 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.js"></script> 
 
<div id="app"> 
 
    Client List 
 
    <button v-on:click="addList()">Add</button> 
 
    <table> 
 
    <th>First Name</th> 
 
    <th>Middle Name</th> 
 
    <th>Last Name</th> 
 
    <tr v-for="client in clientList"> 
 
     <td><input type="text" v-model="client.firstName"></td> 
 
     <td><input type="text" v-model="client.midName"></td> 
 
     <td><input type="text" v-model="client.lastName"></td> 
 
    </tr> 
 
    </table> 
 
    <div> 
 
    <div>Result</div> 
 
    <div>{{fullList}}</div> 
 
    </div> 
 
</div>

Verwandte Themen