标签: svelte-3

像 <svelte:window on:keydown={handleKeydown}/> 组件这样的监听器是作用域还是全局的?

如果我使用以下方法在组件内添加一个关键侦听器

<svelte:window on:keydown={handleKeydown}/>
Run Code Online (Sandbox Code Playgroud)

根据https://svelte.dev/tutorial/svelte-window,组件被销毁时侦听器是否会被删除?我想确保我不会造成任何类型的内存泄漏。

svelte-3

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

为什么我无法访问 svelte3 脚本标签内的“$:”又名反应变量?

我对 svelte 还很陌生,一周前就开始了......

\n\n

我想知道我真的很喜欢\xe2\x9d\xa4\xef\xb8\x8f\xe2\x9d\xa4\xef\xb8\x8f它但我有一个问题\xe2\x98\xb9\xef\xb8 \x8f\xe2\x98\xb9\xef\xb8\x8f

\n\n

我正在尝试访问脚本标签中的 $: 变量,但出现 Error Cannot access \'greeting\' before initialization

\n\n
<script>\n    let name = \'world\';\n    $: greeting = `Hello ${name}`\n    console.log(greeting)\n</script>\n\n<h1>Hello {name}!</h1>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我还尝试在使用它之前用let声明变量

\n\n
    let greeting\n
Run Code Online (Sandbox Code Playgroud)\n\n

但在这种情况下console.log输出undefined.

\n

svelte svelte-3 reactive-variable

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

Svelte 获取当前 svelte 文件的所有属性

如何获取当前 svelte 文件的所有属性?

例如这个Component1.svelte

<script>
  let x = '';
  let y = '';
  let z = '';

  onMount(function(){
    console.log( what? ); 
    // need to print x, y, and z which set by other code
    // that using/importing this file
    // without defining one by one, was there such property?
  });
</script>
<span>{x}</span>
<div>{y}</div>
<p>{z}</p>
Run Code Online (Sandbox Code Playgroud)

使用者whatever.svelte

<script>
   import Foo from `./Component1.svelte`
</script>
<Foo x="1" y="abc">test</Foo>
Run Code Online (Sandbox Code Playgroud)

svelte svelte-3

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

Svelte:使组件对变量做出反应(重新渲染)

我想每当“view.current”更改时重新渲染“Body”(我的 svelte 组件),以便它渲染相应的 .svelte 视图/组件:

应用程序.svelte

    <script>
    import Header from "./components/Header.svelte";
    import Footer from "./components/Footer.svelte";
    import Body from "./components/Body.svelte";

    import Login from "./views/Login.svelte";
    import Dashboard from "./views/Dashboard.svelte";

    import { view } from "./store";
</script>

<Header />
    <Body>
        {#if view.current === view.login}
            <Login />
        {:else if view.current === view.dashboard}
            <Dashboard />
        {/if}
    </Body>
<Footer />
Run Code Online (Sandbox Code Playgroud)

在“Body.svelte”中,我只有一个可以设计样式的插槽

身材苗条

    <div class="container">
    <div class="content">
        <slot></slot>
    </div>
</div>

<style>
    .container {
        padding: 1em;
        display: flex;
    }
    .content {
        margin: auto;
    }
</style>
Run Code Online (Sandbox Code Playgroud)

在 Login.svelte (和其他 …

javascript node.js svelte svelte-component svelte-3

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

如何在 sapper 的 svelte 组件中运行服务器发送的事件

我有一个名为 [symbol].svelte 的 svelte 组件,我想在其中启动与流服务的连接以接收服务器发送的事件。我还没有找到成功做到这一点的方法。

由于 EventSource 仅在浏览器中运行,因此我在onMount函数中对其进行了初始化,如下所示:

<script>
    export let quote;

    let sse = {};

    onMount(async () => {
        sse = new EventSource(`https://myurl.com?symbol=${quote.symbol}`);
        sse.onmessage = (event) => {
            let response = JSON.parse(event.data);
            if(!response.length) return;
            quote = response[0];
        }
    });

    onDestroy(() => {
        if(sse.readyState && sse.readyState === 1) {
            sse.close();
        }
    })  
</script>

<div>{quote.symbol}</div>
Run Code Online (Sandbox Code Playgroud)

这工作正常,除非我导航到使用相同组件的另一条路由 - 因为该组件不会卸载和重新安装,onMount()不会触发,因此不会实例化新的 SSE 请求。我不知道有什么方法可以轻松地强制组件重新安装,这将是最简单的(相关的github问题在这里

另一种尝试是使用反应式语句,如下所示:

<script>
    export let quote;

    let sse = {};

    $: {
        if(process.browser === true) { …
Run Code Online (Sandbox Code Playgroud)

javascript server-sent-events svelte sapper svelte-3

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

触发一个事件来警告客户以 svelte 保存他的更改

我想警告用户在离开页面之前保存他的更改(表单更改)。如果他点击窗口上的任意位置,我想触发此警报。它可能是后退按钮或重新加载或页面上可用的任何导航链接。有人可以帮忙吗?

svelte svelte-component svelte-store svelte-2 svelte-3

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

将 props 传递给 Svelte 的根组件

据我了解,与许多前端框架一样,Svelte 允许开发人员将逻辑分离为更小的、可重用的组件文件。这样做时,您可以将 props 从父组件传递到子组件。

我想知道是否可以将 props 传递给根组件本身。我正在尝试使用 Svelte 创建模型,并需要在 App.svelte 范围之外确定一些变量(即在导入的同一级别分配的变量bundle.js

svelte svelte-component svelte-3

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

SvelteKit SSR - 如何阻止服务器端渲染,直到获取数据?

我正在使用 SvelteKit,出于 SEO 的原因,我想使用完整的 SSR 并确保所有数据在传递到浏览器之前都在服务器端获取和渲染。换句话说,对后端 API 的所有调用都应该在传递初始页面响应之前完成。

但是,从文档中我不清楚如何实现这一点。(我可能错过了一些东西。)

我已经尝试过以下操作,但这只会提供一个完全空的主体:

<script>
    let promise = fetch('https://swapi.dev/api/people/1/')
        .then((response) => response.json());
</script>

{#await promise then character}
<main>
    <h1>Your character</h1>
    Name is {character.name}
</main>
{/await}
Run Code Online (Sandbox Code Playgroud)

有谁知道如何使用 SvelteKit 阻止服务器端渲染,直到获取数据为止?

svelte svelte-3 sveltekit

3
推荐指数
2
解决办法
3424
查看次数

从 Svelte Store 获取/读取值

我想在任何给定时间读取精简的存储价值。我了解更新值时会调用 subscribe 方法。即使商店没有更新,我也想阅读商店。

svelte svelte-store svelte-3

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

Svelte - 监视组件外部组件属性的更改(访问器)

是否可以在组件外部监视组件属性的更改?

我尝试过使用该$: 声明,但它似乎不起作用(除了第一次 - 检测组件何时安装)。

即这是属性从内部改变的组件

<script>
  export let title = 'Settings';

  setTimeout(() => {
    title = 'Settings - Test';
  }, 2000);

//
</script>

<svelte:options accessors={true}/>

Run Code Online (Sandbox Code Playgroud)

以及包含它的组件:

<script>
    import SettingsPage from './Settings.svelte';
    
    let page;   
    let title = '';
    
    $: {
        if (typeof page !== 'undefined') {
            title = page.title;
        }
    }
    
    $: title2 = typeof page !== 'undefined' ? page.title : '';
        
</script>

After 2 seconds, the titles should change to "Settings - test" (it does not work).

<h3>title: …
Run Code Online (Sandbox Code Playgroud)

javascript svelte svelte-3

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