javascript - 如何修复 "default slot raw html rendering in Vue.js component"

标签 javascript vuejs2 vue-component

我有一个自定义输入组件,并尝试使用slot将另一个元素传递给该组件,但是当在父组件上的自定义输入组件标签内使用任何html(例如简单按钮)时,内容会呈现作为原始 html(如转义的 html 文本)

我试图在<slot></slot>内编写html按钮代码自定义输入组件上的标签,工作正常,但是当从父组件传递时就损坏了!

自定义输入模板是这样的:

<template>
  <div class="form-group" :class="{ 'ltr ltr-input': ltr }">
    <textarea :id="id" :value="value" @change="input"></textarea>
    <label :for="id">{{ fieldLabel }}</label>
    <slot>
      <button>fallback</button>
    </slot>
  </div>
</template>

在父元素上:

<TextArea id="message" v-model="message" label="message" required>
  <button type="submit">Submit</button>
</TextArea>

这是上述代码结果的屏幕截图:

slot

最佳答案

我的评论中有更多解释:您正在为 Vue 组件名称使用“保留”元素标记词,这可能可以解释您遇到的奇怪情况。由于 HTML 标记名称不区分大小写,<TextArea>简单地解析为 <textarea>由 Web 浏览器提供,并继承该 native 元素的所有默认渲染行为。这意味着 <TextArea> 之间的任何文本内容标签将简单地呈现为纯文本,就像它们在 native <textarea> 中一样。元素。

为了避免这个问题,你应该始终努力将你的 Vue 组件命名为唯一的:两个单词是一个好的开始,因为 HTML 标签名称目前不包含两个单词。所以,你可以重命名<TextArea><custom-textarea><v-textarea>它应该可以工作:只需记住也更新您的模板名称即可。

关于javascript - 如何修复 "default slot raw html rendering in Vue.js component",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56208078/

相关文章:

javascript - AWS Lambda 函数不会第一次发送消息,但会发送每条后续消息

vuejs2 - 如何判断 Vue-Router 导航钩子(Hook)是否由 "push"触发?

javascript - 如何解析包含计算的字符串并执行它

javascript - Vue3 监听动态创建的子组件的事件,$on replacement

vue.js - 如何通过 vue 组件中的 vuex 存储获取响应 ajax?

javascript - 为什么我的元素只附加到一个类?

javascript - 仅除数的小数部分

javascript - 在几秒而不是几分钟后触发事件

javascript - Vue 使用 getJSON 选择

vue.js - v-on :change does not work for vue-multiselect