2015-04-21 4 views
15

So habe ich diese string:Wie kann ich einen Template String aus einem regulären String konstruieren?

var name = "Chaim"; 
var templateStr = "Hello, my name is ${name}"; 

Wie kann ich es in ein Template-String konvertieren, so dass das Ergebnis wäre gleich:

var template = `Hello, my name is ${name}`; 

Gibt es eine Möglichkeit, eine Vorlage zu programmatisch konstruieren wörtlich?

+1

Sie können nicht ohne 'eval', und ich glaube nicht, dass Sie möchten. Warum nicht einfach einen Vorlagenstring verwenden? – Bergi

+0

Weil ich eine dynamische Zeichenfolge übergeben möchte, die als Vorlage verwendet werden soll. – haim770

+0

@ haim770 Warum kann die dynamische Zeichenfolge kein Vorlagenliteral sein? – thefourtheye

Antwort

26

Gibt es eine Möglichkeit, programmgesteuert ein Vorlagenliteral zu erstellen?

Nein. "Programmatisch" und "Literal" sind gegensätzlich (außer Sie sind in den Bereichen der Compiler).

Template Strings sollte besser interpoliert Stringliterale oder so genannt wurden. Bitte do not confuse them with templates. Verwenden Sie eine Vorlage-Engine Ihrer Wahl, wenn Sie dynamisch erstellte Zeichenfolgen für Vorlagen verwenden möchten.

Natürlich Vorlage Literale könnte bei der Umsetzung solcher helfen, und Sie können einfach mit etwas weg wie

function assemble(literal, params) { 
    return new Function(params, "return `"+literal+"`;"); // TODO: Proper escaping 
//    ^^^^^^^^ working in real ES6 environments only, of course 
} 
var template = assemble("Hello, my name is ${name}", "name"); 
template("Chaim"); // Hello, my name is Chaim 
+2

'Template-Strings sollten besser interpolierte String-Literale genannt werden - Werden sie nicht als Quasi-Literale bezeichnet? – thefourtheye

+0

Das programmatisch ≠ ist der Schlüssel hier. –

Verwandte Themen