2017-05-15 6 views
1

ist hatte ich folgendes Checkbox in meinem alten Lenker Ansicht:Vue.js: Set Kontrollkästchen aktiviert, wenn Aussage wahr

<div class="form-group"> 
    <input type='checkbox' name='xmlOnline[]' value="stepstone" class='' {{#if (ifIn 'stepstone' job.xmlOnline)}} checked="checked" {{/if}}> Stepstone 
    <input type='checkbox' name='xmlOnline[]' value="karriere" class='' {{#if (ifIn 'karriere' job.xmlOnline)}} checked="checked" {{/if}}> Karriere 
</div> 

Also, wenn job.xmlOnline „Stepstone“ als Wert hat, sollte sie es markieren, wie geprüft . Gleiches gilt für "karriere".

Jetzt versuche ich das gleiche in Vue.js für meine POST-Formular zu erreichen. So sieht das Objekt "job" aus: http://t2w-api.herokuapp.com/jobs/590c20d42b1c4300046bb1b9

So kann es entweder "karriere", "stepstone", beides oder "null" enthalten.

Was ich bisher in meiner Komponente bekam:

<div v-for="(xml, index) in job.xmlOnline"> 
    <input type="checkbox" :checked="xml == 'stepstone'"> Stepstone {{ index }} 
    <input type="checkbox" :checked="xml == 'karriere'"> Karriere {{ index }} 
</div> 

Ankreuzfelder erhalten überprüft, aber ich habe sie verdoppelten. Ich weiß auch nicht, wie man ein V-Modell hinzufügt.

Dies ist die Quelle meiner Komponente. Hat etwas ähnlich mit "Qualifikationen"/"Verantwortung": https://github.com/markusdanek/t2w-vue/blob/mdanek/2-auth-system/src/components/backend/JobEdit.vue

Antwort

2

Eine mögliche Lösung

<input type="checkbox" 
     :checked="job.xmlOnline && job.xmlOnline.includes('stepstone')" 
     @change="onChange('stepstone', $event)"> Stepstone 
<input type="checkbox" 
     :checked="job.xmlOnline && job.xmlOnline.includes('karriere')" 
     @change="onChange('karriere', $event)"> Karriere 

Und die onChange Methode

methods:{ 
    onChange(value, $event){ 
    if (!this.job.xmlOnline) 
     this.job.xmlOnline = [] 

    const index = this.job.xmlOnline.findIndex(v => v == value) 
    const checked = $event.target.checked 

    if (checked && index < 0) 
     this.job.xmlOnline.push(value) 
    if (!checked && index >= 0) 
     this.job.xmlOnline.splice(index, 1) 
    } 
} 

Example.

+0

Danke! Perfekt funktioniert :) Können Sie mir helfen, wie ich diese Checkbox wenn ich einen neuen Job hinzufügen würde? https://jsfiddle.net/ush3mps5/ – mrks

+0

Ich habe auch vergessen, dass es auch möglich ist, dass job.xmlOnline auch nichts enthalten kann. :/ – mrks

+0

@mrks Wenn du nichts sagst, meinst du, dass es null ist oder dass es ein leeres Array ist. Wenn es ein leeres Array ist, funktioniert es immer noch wie in der Antwort. So weit, wie Sie es posten würden, hängt das von Ihrer Serverseite ab. – Bert

Verwandte Themen