からVueの2成分を注入:[一時C = 200]動的私はそれらにショートコードを持つユーザーができる入力テキスト管理エリアのフォーム有するショート
何で
熱オーブン私は、フロントエンドに表示されたときに
temp
ショートコードが解析され、Vue 2コンポーネントに変換されることを望みます。ここでは単純化された
Temperature.vue
コンポーネントです:<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>
解析が正常に動作し、かつ置換が印刷されています
<template> <span class="temperature"> {{ celsius }}°C </span> </template> <script> import { mapGetters, mapActions } from 'vuex' export default { props: ['celsius'], name: 'temperature' } </script>
そして、ここでは、ショートコードとテキストを解析し、レンダリングします簡略化
Instructions.vue
コンポーネントですが、フロントエンドでしかし、<temperature>
タグは、Vueコンポーネントとしてではなく文字通りにレンダリングされます。 <温度で熱オーブン:摂氏=「200」>私の周り私の頭をラップすることができないよう何< /温度>
は、それが実際に変換するために私が取るべきステップです私が定義した
Temperature
コンポーネントに入れます。それも可能ですか?私が行方不明になっているより正統な方法がありますか?
v-html
を使用してテキストをレンダリングすることのセキュリティ上の懸念もあります。私は必ずしもこれがそこに存在するとは思っていませんが、私は、それがさらにエスケープされた文字列からTemperature
コンポーネントが現れることを期待するためにはるかに遠いと思っています。私はデータベースに挿入する前にいつでも消毒することができますが、可能であれば、私はまだv-html
を避けたいと思います。
クール、私はこのアプローチが好きです。私の持っているものから遠くない、本当に...私はできるだけ早くテストしてお知らせします! –