标签: svelte-component

版本 3 中的 Svelte 组件异步加载

我想问你一个关于将一个简单的例子从版本 2 更新到版本 3 的问题。

这个 svelte v2 异步组件加载示例有效(https://codesandbox.io/s/0ooo3z8nqp),但为 v3 编写的这个示例无效(https://codesandbox.io/s/615zv3xp33)。

有什么线索吗?谢谢!

更新: 我的问题是关于将以下代码从 Svelte V2 转换为 V3。

<script>
    export default {
      components: {},
      data() {
        return {
          ChatBox: null
        };
      },
      methods: {
        async loadChatbox() {
          const { default: ChatBox } = await import("./Chatbox.html");
          this.set({ ChatBox });
        }
      }
    };
</script>
Run Code Online (Sandbox Code Playgroud)

svelte svelte-component

1
推荐指数
1
解决办法
1169
查看次数

在 Svelte 3 中访问生成的自定义元素

我正在使用 Svelte 3 和使用 Shadow DOM 生成自定义元素的选项,但我不知道如何获取对包装器自定义元素 (HTMLElement) 的引用,以便我可以附加事件处理程序和操作属性。我有这样的事情:

<svelte:options tag="custom-button"/>

<script>
    import { onMount } from 'svelte';

    function _onClick(e) {
        this.setAttribute('pressed', null);
    }

    var _boundClick = _onClick.bind(this);

    onMount((e) => {
        this.addEventListener('click', _boundClick);

        return () => {
            this.removeEventListener('click', _boundClick);
        };
    });
</script>

<style>
  :host {
    display: block;
  }

  /* Other Styling */
</style>

<slot></slot>
Run Code Online (Sandbox Code Playgroud)

“this”位不起作用(它们在普通的香草自定义元素中起作用)。是否有一些 Svelte 特定的方法来获取对脚本中宿主元素的引用?

谢谢

svelte svelte-component

1
推荐指数
1
解决办法
2052
查看次数

Toggle Svelte 组件中的类

考虑这个 Svelte 代码:

https://svelte.dev/repl/e3ea17e8e09044999bf7cb4bc882adea?version=3.19.2

我如何调整它以便每个按钮都可以独立切换?正如您所看到的,它当前切换所有按钮:(

html javascript css svelte svelte-component

1
推荐指数
1
解决办法
5587
查看次数

Svelte bind:offsetWidth 与上下文

这是我创建苗条上下文的方式:

<script>
import {setContext} from 'svelte'
let layoutWidth


setContext('layout', {layoutWidth})

</script>
<div bind:offsetWidth={layoutWidth}><slot/></div>
Run Code Online (Sandbox Code Playgroud)

如果我尝试getContext在子组件中,那么我得到了undefined但是在父组件中 layoutWidth 总是有价值的。

如何获取offsetHeight苗条的父元素?

我这样使用getContext

<script>
import {getContext} from 'svelte'
const {layoutWidth} = getContext('layout')
$: console.log(layoutWidth) //undefined
</script>
Run Code Online (Sandbox Code Playgroud)

svelte svelte-component svelte-3

1
推荐指数
1
解决办法
488
查看次数

监听来自 Svelte 组件的分派事件

我正在寻找一种方法来从 JavaScript(而不是从语法)监听另一个组件中的 Svelte 组件分派的事件on:

是我试图在 REPL 上实现的代码。

预期的行为是当单击Close 0按钮时控制台中显示0,对于其他按钮依此类推。

javascript svelte svelte-component svelte-3

1
推荐指数
1
解决办法
2979
查看次数

Svelte:数组突变和重新分配不会触发 #each 块中的重新渲染

Svelte 应用程序 REPL

我不知道为什么这个不更新。我对 Svelte 比较陌生,但我知道使用 thing = thing 方法强制更新对象数组。

不过,我不确定为什么这不会重新渲染?我首先将其作为矩阵,我认为可能有一些嵌套破坏了它,但现在这实际上只是一个平面数组。它在点击时更新矩阵,但不触发重新渲染。

<script>
    import Nested from './Nested.svelte';
    let matrix = new Array(9).fill(null)
    let turn = 0
    
    let handleChange = (index) => {
        if (matrix[index] != null) return
        let newColor = turn % 2 == 0 ? 'red' : 'blue'
        matrix[index]= newColor
        turn++
        matrix = matrix
    }
</script>
    {#each matrix as team, index}
        <Nested team={team} index={index} click={handleChange}/>
        {#if (index==2 || index==5)}
            <br />
        {/if}
    {/each}
Run Code Online (Sandbox Code Playgroud)

嵌套组件:

<script>
    export let index;
    export let click;
    export let …
Run Code Online (Sandbox Code Playgroud)

svelte svelte-component svelte-3

1
推荐指数
1
解决办法
2091
查看次数

如何更新这个 Svelte 商店而不每次都重新创建它?

这里是 REPL:https://svelte.dev/repl/56770fec88af4b76bdc8ea962178854e ?version=3.42.1

这里是代码:

应用程序.svelte:

<script>
    import {editableStore} from "./store";
    
    let name = "John"

    $: player = editableStore(name);
</script>

<h1>Hello {$player.name}!</h1>

<button on:click={() => name = (name === "Bob" ? "Jerry" : "Bob")}>
    Change name
</button>

<h2>Log:</h2>

{#each $player.log as log}
    <li>{log}</li>
{/each}
Run Code Online (Sandbox Code Playgroud)

商店.js:

import {writable} from "svelte/store";

const defaultStore = {
    name: "Bob",
    age: 18,
    log: []
};

export const editableStore = (name) => {
    console.log("Recreated with name:", name);

    const {subscribe, update} = writable({...defaultStore}, () => () => …
Run Code Online (Sandbox Code Playgroud)

javascript svelte svelte-component svelte-store svelte-3

1
推荐指数
1
解决办法
2738
查看次数

从 HTML 字符串渲染 Svelte 组件

我只是在研究即将到来的项目的 Svelte 框架。

我想知道(因为这是项目要求)是否可以从服务器加载一些 HTML 字符串(使用 fetch api)并将其动态插入到 Svelte 组件中。

似乎可以使用{@html my_html_string}. 有没有办法在 HTML 字符串中包含实际 Svelte 元素的标签?

例如

<script>
    // import MyCustomElementHere....

    let my_html_string = 'Some text <MyCustomElement/> some more text';
</script>    

<p> {my_html_string} [somehow??] </p>
Run Code Online (Sandbox Code Playgroud)

我认为这可能通过将组件转换为自定义元素(或其他东西)来实现,但我还没有设法完成这项工作(可能是因为我对框架还不够了解)。

有谁知道这是否真的可能?

svelte svelte-component

0
推荐指数
1
解决办法
2872
查看次数

svelteJS 中的动态组件导入

我正在将 SvelteJs 与 svelte-spa-router 一起使用。

我有我的案例

<script>
import Component1 from './Component1.svelte'
import Component2 from './Component2.svelte'
</script>

    {#if condition}
       <Component1 {...props1} />
    {:else}
       <Component2  {...props2} />
    {/if}
Run Code Online (Sandbox Code Playgroud)

我有更好的方法可以做到这一点吗?我可以仅在满足条件时动态导入和渲染组件吗?

dynamic-import svelte-component svelte-3

0
推荐指数
1
解决办法
1472
查看次数

如何从 DOM 中检测 svelte 组件?

目前正在制作一个 google chrome 扩展来可视化 svelte 组件,这只能用于开发模式。目前,我正在通过const svelteComponets = document.querySelectorAll(`[class^="svelte"]`);在内容脚本上使用来获取所有 svelte 组件,但它正在获取每个 svelte 元素。只获取组件的方法有哪些?

dom element google-chrome-extension svelte svelte-component

0
推荐指数
1
解决办法
1394
查看次数