如果我使用以下方法在组件内添加一个关键侦听器
<svelte:window on:keydown={handleKeydown}/>
Run Code Online (Sandbox Code Playgroud)
根据https://svelte.dev/tutorial/svelte-window,组件被销毁时侦听器是否会被删除?我想确保我不会造成任何类型的内存泄漏。
我对 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。
<script>\n let name = \'world\';\n $: greeting = `Hello ${name}`\n console.log(greeting)\n</script>\n\n<h1>Hello {name}!</h1>\nRun Code Online (Sandbox Code Playgroud)\n\n我还尝试在使用它之前用let声明变量
\n\n let greeting\nRun Code Online (Sandbox Code Playgroud)\n\n但在这种情况下console.log输出undefined.
如何获取当前 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) 我想每当“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 (和其他 …
我有一个名为 [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) 我想警告用户在离开页面之前保存他的更改(表单更改)。如果他点击窗口上的任意位置,我想触发此警报。它可能是后退按钮或重新加载或页面上可用的任何导航链接。有人可以帮忙吗?
据我了解,与许多前端框架一样,Svelte 允许开发人员将逻辑分离为更小的、可重用的组件文件。这样做时,您可以将 props 从父组件传递到子组件。
我想知道是否可以将 props 传递给根组件本身。我正在尝试使用 Svelte 创建模型,并需要在 App.svelte 范围之外确定一些变量(即在导入的同一级别分配的变量bundle.js)
我正在使用 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 阻止服务器端渲染,直到获取数据为止?
我想在任何给定时间读取精简的存储价值。我了解更新值时会调用 subscribe 方法。即使商店没有更新,我也想阅读商店。
是否可以在组件外部监视组件属性的更改?
我尝试过使用该$: 声明,但它似乎不起作用(除了第一次 - 检测组件何时安装)。
即这是属性从内部改变的组件
<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) svelte-3 ×10
svelte ×9
javascript ×3
svelte-store ×2
node.js ×1
sapper ×1
svelte-2 ×1
sveltekit ×1