ich ein Formular in einem Admin-Bereich haben, wo Benutzer können Text mit Kurzwahlnummern in ihnen:Dynamisch Vue 2-Komponenten von Short injizieren
Wärmeofen bei [temp c = 200]
Was Ich möchte, dass temp
shortcode geparst und in eine Vue 2-Komponente umgewandelt wird, wenn sie im Front-End angezeigt wird.
Hier ist eine vereinfachte Temperature.vue
Komponente:
<template>
<span class="temperature">
{{ celsius }}°C
</span>
</template>
<script>
import { mapGetters, mapActions } from 'vuex'
export default {
props: ['celsius'],
name: 'temperature'
}
</script>
Und hier ist eine vereinfachte Instructions.vue
Komponente, die den Text mit Kurzwahlnummern werden analysieren und Render:
<template>
<div v-html="parseShortcodes(text)"></div>
</template>
<script>
import ShortcodeParser from 'meta-shortcodes'
import Temperature from 'Temperature.vue'
export default {
data:() => {
return {
text: 'Heat oven at [temp c=200]',
parser: ShortcodeParser()
}
},
components: [
Temperature
],
methods: {
parseShortcodes(text) {
return this.parser.parse(text)
}
},
created() {
this.parser.add('temp', function(options) {
return '<temperature :celsius="'+options.c+'"></temperature>'
})
}
}
</script>
Die Analyse funktioniert gut, und die Substitution wird gedruckt im Frontend. Aber das <temperature>
-Tag wird wörtlich wiedergegeben und nicht als eine Vue-Komponente, die etwas erwartet wird.
Wärmeofen bei < Temperatur: celsius = „200“> </Temperatur>
Was kann ich nicht meinen Kopf zu wickeln scheinen um das, was Schritt ist ich nehmen soll es tatsächlich zu verwandeln in die Temperature
Komponente, die ich definiert habe. Ist es überhaupt möglich? Gibt es mehr orthodoxe Wege, dies zu tun, was mir fehlt?
Es gibt auch die Sicherheitsbedenken v-html
der Verwendung des Textes zu machen. Ich möchte nicht unbedingt, dass das da ist, aber ich schätze, es ist noch weit hergeholt, dass die Komponente Temperature
aus einer Escapezeichenfolge angezeigt wird. Ich kann immer vor dem Einfügen in die Datenbank bereinigen, aber ich möchte immer noch v-html
vermeiden, wenn überhaupt möglich.
Cool, ich mag diesen Ansatz. Nicht weit von dem, was ich habe, wirklich ... Ich werde es so schnell wie möglich testen und Sie wissen lassen! –