فهرست سرفصل‌های Vue
خانه (HOME) معرفی (Intro) دایرکتیوها (Directives) v-bind (v-bind) v-if (v-if) v-show (v-show) v-for (v-for) رویدادها (Events) v-on (v-on) متدها (Methods) تغییردهنده های رویداد (Event Modifiers) فرم ها (Forms) v-model (v-model) بایندینگ CSS (CSS Binding) ویژگی های محاسبه شده (Computed Properties) واچرها (Watchers) قالب ها (Templates) چرا، چگونه و راه اندازی (Why, How and Setup) اولین صفحه SFC (First SFC Page) کامپوننت ها (Components) پراپس (Props) کامپوننت های v-for (v-for Components) $emit() ($emit()) ویژگی های عبوری (Fallthrough) (Fallthrough Attributes) استایل Scoped (Scoped Styling) کامپوننت های محلی (Local Components) اسلات ها (Slots) v-slot (v-slot) اسلات های Scoped (Scoped Slots) کامپوننت های پویا (Dynamic Components) Teleport (Teleport) درخواست HTTP (HTTP Request) رفرنس های تمپلیت (Template Refs) هوک های چرخه عمر (Lifecycle Hooks) Provide/Inject (Provide/Inject) مسیریابی (Routing) ورودی های فرم (Form Inputs) انیمیشن ها (Animations) انیمیشن با v-for (Animations with v-for) بیلد (Build) Composition API (Composition API) ویژگی های توکار (Built-in Attributes) ویژگی 'is' ('is' Attribute) ویژگی 'key' ('key' Attribute) ویژگی 'ref' ('ref' Attribute) کامپوننت های توکار (Built-in Components) <KeepAlive> (<KeepAlive>) <Teleport> (<Teleport>) <Transition> (<Transition>) <TransitionGroup> (<TransitionGroup>) المان های توکار (Built-in Elements) <component> (<component>) <slot> (<slot>) <template> (<template>) نمونه کامپوننت (Component Instance) $attrs ($attrs) $data ($data) $el ($el) $parent ($parent) $props ($props) $refs ($refs) $root ($root) $slots ($slots) $emit() ($emit()) $forceUpdate() ($forceUpdate()) $nextTick() ($nextTick()) $watch() ($watch()) دایرکتیوها (Directives) v-bind (v-bind) v-cloak (v-cloak) v-for (v-for) v-html (v-html) v-if (v-if) v-else-if (v-else-if) v-else (v-else) v-memo (v-memo) v-model (v-model) v-on (v-on) v-once (v-once) v-pre (v-pre) v-show (v-show) v-slot (v-slot) v-text (v-text) گزینه های نمونه (Instance Options) داده ها (data) متدها (methods) محاسبه شده ها (computed) watch (watch) پراپس (props) emits (emits) expose (expose) هوک های چرخه عمر (Lifecycle Hooks) beforeCreate (beforeCreate) created (created) beforeMount (beforeMount) mounted (mounted) beforeUpdate (beforeUpdate) updated (updated) beforeUnmount (beforeUnmount) unmounted (unmounted) errorCaptured (errorCaptured) renderTracked (renderTracked) renderTriggered (renderTriggered) activated (activated) deactivated (deactivated) serverPrefetch (serverPrefetch) مثال ها (Examples) تمرین ها (Exercises) کوییز (Quiz) سیلابس (Syllabus) برنامه مطالعه (Study Plan) سرور (Server) گواهینامه (Certificate)
نتیجه‌ای برای جستجو یافت نشد.
Vue

Vue — v-html (v-html)

آخرین بروزرسانی: 1404/08/21

v-html (v-html)

دایرکتیو «v-html» یعنی «خروجی HTML خام بده». «دایرکتیو (Directive)» دستور ویژه قالب است. با آن می توان تگ ها و متن را مستقیم داخل عنصر گذاشت. اما با آکولادها، فقط متن ساده می بینی.

تعریف و کاربرد v-html

«v-html» تگ ها و متن HTML را داخل یک عنصر می گذارد. اگر با {{ }} بنویسی، فقط رشته متن نمایش می شود. بنابراین، وقتی واقعاً به تگ نیاز داری، از «v-html» استفاده کن.

مثال پایه: تفاوت با آکولاد

یک لیست را یک بار با آکولاد، و یک بار با «v-html» نشان می دهیم.

<template>
  <div id="app">
    <div>{{ htmlContent }}</div>
    <div v-html="htmlContent"></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      htmlContent: '<ol><li>One</li><li>Two</li></ol>'
    };
  }
};
<\/script>

مشاهده در ادیتور

استایل Scoped روی v-html اثر ندارد

در SFC اگر «style scoped» باشد، قوانینش روی محتوای «v-html» اعمال نمی شود.

<template>
  <h1>Example</h1>
  <p>When using scoped styling, styling for HTML included with the 'v-html' directive does not work.</p>
  <p><a href="showvue.php?filename=demo_ref_v-html2_2">See the next example</a> for how we can fix this by using CSS Modules.</p>
  <div v-html="htmlContent" id="htmlContainer"></div>
</template>

<script>
export default {
  data() {
    return {
      htmlContent: '"<p>Hello from v-html</p>"'
    };
  }
};
<\/script>

<style scoped>
#htmlContainer {
  border: dotted black 1px;
  width: 200px;
  padding: 10px;
}
#htmlContainer > p {
  background-color: coral;
  padding: 5px;
  font-weight: bolder;
  width: 150px;
}
</style>

مشاهده در ادیتور

راه حل: CSS Modules با style module

به جای «scoped»، از «style module» استفاده کن تا روی «v-html» هم اعمال شود.

<template>
  <h1>Example</h1>
  <p>Scoped styling for HTML included with the 'v-html' directive now works by using CSS Modules with 'style module', instead of 'style scoped'.</p>
  <div v-html="htmlContent" :id="$style.htmlContainer"></div>
</template>

<script>
export default {
  data() {
    return {
      htmlContent: '"<p>Hello from v-html</p>"'
    };
  }
};
<\/script>

<style module>
#htmlContainer {
  border: dotted black 1px;
  width: 200px;
  padding: 10px;
}
#htmlContainer > p {
  background-color: coral;
  padding: 5px;
  font-weight: bolder;
  width: 150px;
}
</style>

مشاهده در ادیتور

گام های عملی

  1. داده HTML را در یک متغیر ذخیره کن.
  2. عنصر مقصد را مشخص و «v-html» بده.
  3. اگر SFC داری، از CSS Modules استفاده کن.

هشدار: اگر کاربر بتواند محتوا تعیین کند، خطر «XSS» وجود دارد. همیشه ورودی ها را کنترل کن.

برای ادامه دایرکتیوها، صفحه مرجع دایرکتیوها را ببین. همچنین اتصال ویژگی را در v-bind تمرین کن. و برای حلقه ها، v-for را بخوان. اگر خواستی همین صفحه را ذخیره کنی، از لینک دایرکتیو v-html استفاده کن.

جمع بندی سریع

  • «v-html» تگ ها را مستقیم وارد می کند.
  • آکولادها فقط متن ساده می دهند.
  • در SFC از CSS Modules کمک بگیر.
  • ورودی های کاربر را ایمن سازی کن.