2017-04-20 1 views
2

In meinem NodeJS Route hinzufügen, ich habe folgendes:Wie img src-Attribut mit VueJs

router.get('/list/:id', function(req, res, next) { 
    request("http://localhost:3000/api/journal/" + req.params.id, function(error, response, body) { 
     var json = JSON.parse(body); 
     res.render('listdetail', { title: 'Journal', data: json }); 
    }); 
}); 

Die Daten sind ein JSON-Objekt alle meine Bildschirmfelder enthält. Eines der Felder ist eine base64-Darstellung eines Bildes.

Dann in meiner Liste Detail html Ich habe folgendes:

<div id="app"> 
    <img class="materialboxed" src="{{data.base64Image}}" width="200"> 
</div> 

Dies wird sicherlich nicht funktioniert ... Wie kann ich mit dem Attribut src die base64 Informationen hinzufügen, die von NodeJS gesendet wurde?

Ich habe auch versucht die folgenden:

<img class="materialboxed" :src=imagebase64Source width="200"> 
<script type="text/javascript"> 
    var app = new Vue({ 
     el: '#app', 
     data: { 
     imagebase64Source: {{data.base64Image}} 
     } 

    }) 
</script> 

Aber es funktioniert offensichtlich nicht Dank

EDIT:

Seltsam, jetzt ist es funktioniert!

Hier ist, was ich getan habe:

<img class="materialboxed" src="{{ data.base64Image }}" width="200"> 

Der einzige Unterschied, den ich ist der Abstand zwischen dem Schnurrbart sehen. Danke an alle, die geholfen haben.

+0

Können Sie nach dem Code, der holt die Daten und weist sie in der Ansicht "imagebase64Source" zu? Außerdem müssen Sie nicht an "data.base64Image" binden, es sei denn, Sie haben eine Eigenschaft "data" in den Daten Ihrer Ansicht. – Artless

+0

'imagebase64Source: {{data.base64Image}} Warum verwenden Sie die String-Interpolation? Ist Ihre Vue-Komponente durch eine Node-Templating-Engine erstellt? –

+0

@Artless - Ich erhalte gerade diese Daten von mongodb mit Mungo. Die Daten sind in Ordnung, die "Daten" -JSON-Objekte wurden erfolgreich an meine Ansicht gesendet. Meine Frage ist, wie bekomme ich die Base64-Daten von diesem Objekt und ordnen Sie es meinem Src-Attribut zu? –

Antwort

1

Sie können es einfach so:

<template> 
    <div> 
     <img :src="image"/> 
    </div> 
</template> 

<script> 
    module.exports = { 
     data: function() { 
      return { 
       image: //your b64 string there 
      }; 
     } 
    }; 
</script> 

Achten Sie durch die Art und Weise, je nachdem, was Sie auf Ihrem String haben, können Sie einen Header an dem rohen Zeichenfolge hinzufügen.

<template> 
    <div> 
     <img :src="imgWithHeader"/> 
    </div> 
</template> 

<script> 
    module.exports = { 
     data: function() { 
      return { 
       image: //your b64 string there 
      }; 
     }, 
     computed: { 
      imgWithHeader() { 
       return 'data:' + MIMETypeOfTheImage + ';base64,' + this.image; 
      } 
     } 
    }; 
</script> 

Natürlich sollten Sie herausfinden, was der Typ des Bildes ist, in diesem Fall.

+0

Hi @Cobaltway - danke für deine Hilfe. Die Base64-Daten sind in Ordnung, ich brauche in diesem Sinne nichts auszuarbeiten. Mein Problem ist, wie bekomme ich das Daten-JSON-Objekt, das vom Server in der res.Render ('Listdetail', {Titel: 'Journal', Daten: JSON}) gesendet wurde; Linie und fügen Sie die data.base64Image Informationen zum src Attribut meines Bildes hinzu. Macht das Sinn? Danke –

+0

Nun, es scheint, dass Sie eine Server-seitige Templating-Engine (wie Nunjuncks oder Lenker) verwenden, denn Res.Render sieht nicht wie eine VueJS verwandte Funktion aus. Sie sollten also vorsichtig sein, da sich die Syntax des Schnurrbartes wahrscheinlich mit der VueJS-Syntax überschneidet. Sehen Sie sich das generierte HTML an und prüfen Sie, ob es zur normalen Interpolation von Vuejs passt: https://vuejs.org/v2/guide/syntax.html#Text – Cobaltway

+0

Wenn ein Konflikt besteht, können Sie den VueJS-Interpolationsprovider ändern (ersetzen Sie {{ }} (durch irgendetwas anderes), mit diesem Parameter: https://vuejs.org/v2/api/#delimiters – Cobaltway

1

Ich denke, die Methode, die Sie versucht, sollte funktionieren, wenn die Syntax dieses

So korrigiert worden ist:

<img class="materialboxed" :src=imagebase64Source width="200"> 
<script type="text/javascript"> 
    var app = new Vue({ 
     el: '#app', 
     data: { 
     imagebase64Source: {{data.base64Image}} 
     } 

    }) 
</script> 

sollte dies geändert werden:

<img class="materialboxed" :src="imagebase64Source" width="200"> 
<script type="text/javascript"> 
    var app = new Vue({ 
     el: '#app', 
     data() { 
     return { 
      imagebase64Source: data.base64Image, 
     } 
     } 

    }) 
</script>