苗条的标题后缀

时间:2019-10-29 11:13:12

标签: javascript dom svelte svelte-component svelte-3

我想在每个Svelte页面上添加一个标题后缀,例如- mywebsite

我正在努力寻找如何轻松,简单地做到这一点。

在苗条的网站资源上,我们可以看到他们是手动完成的:https://github.com/sveltejs/svelte/blob/1273f978084aaf4d7c697b2fb456314839c3c90d/site/src/routes/docs/index.svelte#L15

我开始创建这样的组件:

<script>
  export let title = false;
</script>

<svelte:head>
  <title>
    {#if title}
      {title} • WebSite
    {:else}
      Website • Home suffix
    {/if}
  </title>
</svelte:head>

但是:

  • 我遇到一个<title> can only contain text and {tags}svelte(illegal-structure)错误
  • 我不确定这是最简单的方法。

如何实现我想做的事?

3 个答案:

答案 0 :(得分:3)

虽然在标记内使用三元组内部可以很好地工作,但反应性语句可能有助于清除标记:

<script>
  export let title = false;

  $: fullTitle = title 
        ? `${title} • WebSite` 
        : 'Website • Home suffix';
</script>

<svelte:head>
  <title>{fullTitle}</title>
</svelte:head>

答案 1 :(得分:2)

您也可以为此使用小型商店。 在这里您可以找到 REPL 示例:
https://svelte.dev/repl/b604a75a8a344527a39f10cab7b7ee66?version=3.32.0

import { writable } from 'svelte/store';

function createTitle() {
    const {subscribe, set, update} = writable('');
    
    return {
        subscribe,
        set: (value) => {
            set(`${value} • WebSite`)
        },
        clear: () => {
            set('Website • Home suffix');
        }
    }
}

export const title = createTitle();

然后当你想设置新标题时,你可以使用:

title.set('page title')

商店会自动添加后缀...

如果你想显示主标题调用:

title.reset()

答案 2 :(得分:1)

由于<title>只能包含文本或{tags},因此您可以使用三元运算符来计算文档标题。

示例

<script>
  export let title = false;
</script>

<svelte:head>
  <title>{title ? `${title} • WebSite` : 'Website • Home suffix'}</title>
</svelte:head>