2017-09-28 2 views
2

Meine Komponentenvorlage enthält die folgenden Kontrollkästchen Code geprüft zu erhalten:Exportieren VueJS gerenderte HTML mit Checkbox versagt Zustand

<div ref="htmlData"> 
    <input 
     type="checkbox" 
     class="mycb" 
     :id="uniqID" 
     :disabled="disabled" 
     v-model="cbvalue" 
    > 
</div> 

(Teile der Einfachheit halber entfernt).

Ich muss ein PDF aus dieser Vorlage (auf dem Server) erstellen. Das ist, was ich im Code tun:

methods : { 
    save() { 
     let saveData = { 
       'html': this.$refs.htmlData.innerHTML 
      }; 
     this.$http.post('/api/save',saveData); 
    } 
} 

Allerdings ist die gespeicherte HTML nicht Checkbox Zustand enthält, so dass es immer einen ungeprüften Checkbox speichert.

Hier ist eine leicht modifizierte jsfiddle.

Meine Frage ist: Wie kann ich den Checkbox-Status im gerenderten HTML erfassen?

ich versuchte, indem :checked="cbvalue" prop - kein Glück

+0

Ich habe 2 Fragen für Sie, Erste Warum drängen Sie HTML-Server? Der zweite VueJS-Zustand ist mit Virtual DOM, http://jsfiddle.net/yMv7y/3533/ Ich habe etwas geändert, dass Sie meinen Namen nicht mit Eingabe-Text auch sehen .. mein Vorschlag wird Push-JSON-Daten zum Server, verwenden Sie die Vorlage um Ihre Daten zu binden. –

+0

1. Ich muss HTML in PDF konvertieren und ich kenne keine gute JS-Bibliothek, die es auf der Clientseite tun kann. 2. Ich möchte jede andere Analyse auf dem Server vermeiden, da die HTML-Vorlagen variieren können. Einige verwenden Kontrollkästchen, andere nicht, und ich möchte keine vollständige serverseitige Rendering-Engine installieren, um dieses kleine Problem zu lösen. – andrei

Antwort

3

Es sieht aus wie es keine Möglichkeit gibt, das checked Attribut eines Eingang zu binden; Vue macht alles durch die Immobilie. (Als Referenz ist die Eigenschaft der interne Status, das Attribut wird im HTML angezeigt.)

Damit das Attribut die Eigenschaft widerspiegelt, können Sie eine kleine Direktive hinzufügen.

var demo = new Vue({ 
 
    el: '#demo', 
 
    data:() => ({ 
 
    val: false 
 
    }), 
 
    methods: { 
 
    save() { 
 
     console.log(this.$refs.main.innerHTML); 
 
    } 
 
    }, 
 
    directives: { 
 
    explicitChecked: { 
 
     update(el) { 
 
     if (el.checked) { 
 
      el.setAttribute('checked', 'checked'); 
 
     } else { 
 
      el.removeAttribute('checked'); 
 
     } 
 
     } 
 
    } 
 
    } 
 
})
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.min.js"></script> 
 
<div id="demo"> 
 
    <button @click="save">save</button> 
 
    <div ref="main"> 
 
    <input type="checkbox" v-model="val" v-explicit-checked> 
 
    </div> 
 
</div>