我有一个带有Vue应用程序的HTML页面,它由单个组件组成.

该应用程序安装在ID为paid-content的元素上.

index.html

<div id="paid-content">
  <h2>如果您已登录,则应看到以下内容</h2>
</div>

main.ts

import PaidContent from './PaidContent.vue'
createApp(PaidContent).mount('#paid-content')

该组件本身判断用户是否已登录.

PaidContent.vue

<script lang="ts">
export default {
    methods: {
        getUser() {
            return "bob"
        },
    }
}
</script>

<template>
    <template v-if="getUser() !== null">
        您已登录!
        <slot></slot>
    </template>
    <template v-else>
        Please sign in.
    </template>
</template>

现在它显示:

您已登录!.

我希望它呈现paid-content容器内的HTML以显示:

您已登录!

如果您已登录,则应看到以下内容

默认情况下,Vue似乎删除了<h2>元素.

我试过的是:

  • 使用插槽
  • In-DOM Root Component Template按每the docs人计算.该语法与我正在使用的静态站点生成器(Hugo)不兼容.

有没有一种方法可以从Vue组件中的容器元素呈现HTML?

(VUE版本为3.3.2)

推荐答案

  • 获得根div又名#paid-content‘S innerHTML
  • 把它作为props 传给PaidContent
  • 使用v-html渲染它

应用视图

<script lang="ts">
export default {
  props: {
    // here
    paidContentHtml: {
      required: true,
      type: String,
    },
  },
  methods: {
    getUser() {
      return "bob";
    },
  },
};
</script>

<template>
  <template v-if="getUser() !== null">
    You are signed in!

    <!-- Render it here -->
    <div v-html="paidContentHtml"></div> 
  </template>
  <template v-else> Please sign in. </template>
</template>

双手

import { createApp } from "vue";
import PaidContent from "./PaidContent.vue";

const $paidContent = document.querySelector("#paid-content")?.innerHTML;

createApp(PaidContent, {
  paidContentHtml: $paidContent,
}).mount("#paid-content");

Html相关问答推荐

如何改进这个jQuery滑动器的功能?

如何更改计时器S输入的Angular 字体大小?

渐变进度条位置

如何将功能附加到嵌入式药剂中的按钮?

有没有一种方法可以很容易地将这个div从底部:0转换到顶部:0?

如何从elementor中的滑块中获取文本?

列表项文本在占据剩余空间之前在标记下换行

如何使背景图像在面包屑中相互重叠

根据Tailwind CSS中的子计数而非子宽度进行对齐,并水平对齐

视频重新加载而不是在 Swift 中暂停 WKWebView

Web 组件 #shadow-root css 泄漏到文档

如何使用javascript在jsx中重复插入特殊字符?

如何使用CSS将页面标题水平居中对齐

为什么 css position:fixed 不适用于对话框标签?

透明渐变凹矩形

将表格标题和过滤器调整到表格的顶部边缘

使用 TailwindCSS 将徽标放在左上角,将菜单放在右上角

如何向上移动图像并溢出图像的一部分而另一部分不溢出

沿文本对齐双引号

为什么浏览器在 Select 一个包裹在 标签中的块级元素后包含相邻元素?