Svelte 中是否有等效的“v-html”?
Is there a `v-html` equivalent in Svelte?
我最近使用了 Svelte,并用它编写了一些代码。我一直在做
<script>
let title = "Amazing title"
</script>
<h1>{ title }</h1>
将 html 元素的完整值设置为变量时,但我想知道是否有更好的方法来完成此操作,例如 Vue JS 中的 v-html
<template>
<h1 v-html="title" />
</template>
<script>
export default {
data() {
return {
title: "Amazing title"
}
}
}
</script>
非常感谢你的帮助,祝你今天愉快!
据我所知,Svelte 中没有任何内置的 HTML 属性提供像 Vue 这样的指令。但是使用 actions.
构建您自己的等效指令非常容易
要模拟 Vue 的 v-html 和 v-text 的功能,您可以 return 一个更新函数来更改 js 文件中的 innerHTML 或 innerText:
// html.js
export function html(node, content) {
node.innerHTML = content
return {
update(content) {
node.innerHTML = content
}
}
}
然后在要替换其内容的元素上使用它:
<!-- App.svelte -->
<script>
import { html } from './html.js'
let content = `<p>Content</p>`
</script>
<p use:html={content} />
这里有一个 REPL 显示了一个更完整的示例,其中还包含 v-text 样式操作。
您可以使用 {@html variableName}
。因此,您可以 <span>{@html rawHTML}</span>
而不是 <span v-html="rawHTML"></span>
。如果 rawHTML
发生变化,它是反应性的。
我最近使用了 Svelte,并用它编写了一些代码。我一直在做
<script>
let title = "Amazing title"
</script>
<h1>{ title }</h1>
将 html 元素的完整值设置为变量时,但我想知道是否有更好的方法来完成此操作,例如 Vue JS 中的 v-html
<template>
<h1 v-html="title" />
</template>
<script>
export default {
data() {
return {
title: "Amazing title"
}
}
}
</script>
非常感谢你的帮助,祝你今天愉快!
据我所知,Svelte 中没有任何内置的 HTML 属性提供像 Vue 这样的指令。但是使用 actions.
构建您自己的等效指令非常容易要模拟 Vue 的 v-html 和 v-text 的功能,您可以 return 一个更新函数来更改 js 文件中的 innerHTML 或 innerText:
// html.js
export function html(node, content) {
node.innerHTML = content
return {
update(content) {
node.innerHTML = content
}
}
}
然后在要替换其内容的元素上使用它:
<!-- App.svelte -->
<script>
import { html } from './html.js'
let content = `<p>Content</p>`
</script>
<p use:html={content} />
这里有一个 REPL 显示了一个更完整的示例,其中还包含 v-text 样式操作。
您可以使用 {@html variableName}
。因此,您可以 <span>{@html rawHTML}</span>
而不是 <span v-html="rawHTML"></span>
。如果 rawHTML
发生变化,它是反应性的。