标签: sveltekit

如何在 Svelte 中创建可在所有页面中使用的上下文?

我目前正在学习 Svelte,我想为这个副项目创建一个身份验证流程。通常,在 React 中,我习惯使用上下文保存身份验证信息。

<AuthContext>
   <App />
<AuthContext>
Run Code Online (Sandbox Code Playgroud)

我想知道 Svelte 是否也可以执行类似的方法?所有教程都是基于组件的上下文。我想在我的应用程序中调用 getContext('authContext') 。

AuthContext.svelte

<script lang='ts'>
      import { writable } from 'svelte/store'
      import { onDestroy, setContext } from 'svelte'
      import {getAuth, type User, onAuthStateChanged} from 'firebase/auth'
    
      const auth = getAuth()
      const userStore = writable<User | null>(null)
      const isLoggedIn = writable<boolean>(false)
      
      const contexts = {
        isLoggedIn,
        userStore,
        logOut,
      }
      
      const unsubscribe =  onAuthStateChanged(auth, (user) => {
        if(user) {
          userStore.set(user)
          isLoggedIn.set(true)
        }
      })

      setContext('authContext', contexts)
 
    function logOut() {
      auth.signOut()
      isLoggedIn.set(false)
    }
    
    
      onDestroy(() …
Run Code Online (Sandbox Code Playgroud)

svelte sveltekit

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

从 OnMount 中提取一个 var,例如 useState

我正在尝试在代码中使用在 onmount 中创建的 const 作为 {myip},我不知道如何从 onmount 中提取它

<script>
  import { page } from '$app/stores'
  import axios from 'axios'
  import { onMount } from 'svelte'

  onMount(async () => {
    const firstip = await axios.get(`https://geolocation-db.com/json/`)

    const finalip = await axios.get(`https://api.ipregistry.co/` + `${firstip.data.IPv4}` + `?key=6nn8zr4k2h34cwkw32`)

    if (!finalip.data.carrier.name) {
      const myip = finalip.data.location.city
      console.log(myip)
    } else {
      const myip = '7 km'
      console.log(myip)
    }
  })

  const { id } = $page.params

  console.log(id)
  const name = id.charAt(0).toUpperCase() + id.slice(1)
</script>
Run Code Online (Sandbox Code Playgroud)

我想提取“myip”并在 onmount 之外使用它谢谢

svelte sveltekit

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

如何上传 Sveltekit 多个文件

在新的 svelteKit 中,我无法上传带有表单 multipart/form-data 和多个属性的多个文件

+页面.svelte

<form
    action="?/add"
    method="post"
    enctype="multipart/form-data"
  >
<input
      multiple
      type="file"
      name="file"
      id="file"
      accept="image/*"
    />
Run Code Online (Sandbox Code Playgroud)

+页面.server.js

export const actions = {
  add: async ({ request, files }) => {
    const data = await request.formData()
  
    const file = data.get('file')

    let filename

    try {

      if (file) {

        const ext = file.name.split('.').pop()
        filename = userName + '-' +Date.now().toString() + '.' + ext
        
        let ab = await file.arrayBuffer()
        console.log(Array.from(ab));

        writeFileSync(`static/img/${filename}`, Buffer.from(ab, (e) => {
          console.log(e)
        }))
      }


      return { success: true …
Run Code Online (Sandbox Code Playgroud)

javascript svelte sveltekit

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

静态文件夹的精简路径

我使用 Sveltekit 并将一些图像放入静态文件夹中。静态 > 图像 > image1.png 等

在源代码 src 中,我有一个名为 的文件夹lib,在lib一个名为 的文件夹内components,有一个文件Footer.svelte。在该文件中,我想引用我的 image1 (它的绝对路径为~/myapp/static/images/image1.png。即使当我尝试此路径时,它也会抛出错误。

所以: src > lib > components > Footer.svelte

static > images > image1.png

src和都static位于 的根目录中myapp

我的这一行Footer.svelteimport Image from '~/myapp/static/images/image1.png';

Footer.svelte我的抓取正确的路线是什么image1.png

请参阅问题描述。

path svelte sveltekit

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

如何使用 firebase 托管托管 sveltekit 应用程序?

我正在尝试将 sveltekit 应用程序部署到 firebase(带有 sveltekit 的 bigginner)。我假设我们将构建应用程序并获取我们的 index.html 文件,但 sveltkit 的情况并非如此。

我正在使用 svelte 自动适配器(我的情况需要)

“苗条”:“^3.46.0”

现在我尝试将 firebase 配置文件更新为这样

{
  "hosting": {
    "public": "src",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  },
  "rewrites": [
    {
      "source": "**",
      "destination": "/src/app.html"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

还根据 firebase文档中托管顺序的优先级中托管顺序的优先级 ,我删除了由 firebase 填充的 index.html 文件,但仍然无法正常工作,并且出现页面未找到错误:此文件不存在,并且在当前目录。

知道我错过了什么吗?

firebase firebase-hosting sveltekit

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

如何监视变量并在每次变量发生变化时运行函数?

这将像on:change事件一样。

我没有使用此事件,因为在某些小型库中不会发出此事件,并且暗示是使用绑定和$.

然而,Svelte 似乎没有一个干净的语法。

我只能想到类似的东西

$: {
    if (variable) {
        doSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

其中每次variable的值发生变化,doSomething()都会运行。

但是语句的使用if很奇怪..如果variable是布尔值怎么办?这样,当变量的值为 false 时,函数将不会运行。

这个想法是在每次变量值发生变化时运行该函数,无论新值实际是什么。

我也尝试过

$: doSomething(variable);
Run Code Online (Sandbox Code Playgroud)

它可以工作,但也很奇怪,因为该函数doSomething可能不需要参数。在这种情况下,参数纯粹是为了添加variable作为此$语法的依赖项......

还尝试了/sf/answers/3989126851/中的答案,但这根本不起作用。文档(/sf/answers/3989126851/)中也没有提到它。

提前致谢!

svelte sveltekit

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

如何在 sveltekit 中导入图像并在 css 中使用

我正在使用 sveltekit,我想知道如何导入图像并在 CSS 背景属性中使用它。
这是我尝试过的:

<script>
    import img from '$lib/images/background-shaded.jpg';
</script>

<div>
    <h1>Hello World</h1>
</div>

<style>
    div {
        background-image: url({img});
    }
</style>

Run Code Online (Sandbox Code Playgroud)

现在,我只是将图像放在静态文件夹中并通过它的 URL 使用。也许这就是推荐的方法......

谢谢。

svelte sveltekit

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

如何正确处理 sveltekit 中的图像和资产

我是 sveltekit 的新手,

我的主要问题是:用 SvelteKit 将图像放在哪里?以及如何使用它。在静态文件夹中,对吗?

但这会导致一个问题:当在此路线中:“@domain/dashboard”时,我使用以下代码:

<img src="user.png" />
Run Code Online (Sandbox Code Playgroud)

它尝试在@domain/user.png 中找到它,一切正常!但是当我使用这条路线:@domain/users/1时,它会尝试在@domain/users/user.png(除了@domain/user.png)中找到它。

请帮我。

ps:我看到有一些主题建议使用这样的东西:

import logo from '$lib/assets/user.png';
Run Code Online (Sandbox Code Playgroud)

所以如果我将图像复制到 lib 文件夹中,静态文件夹的原因是什么?

svelte sveltekit

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

动态路线在它们之间导航时不会刷新

示例项目: https: //github.com/kevinrenskers/slug

基本上我有一条路线/[slug],代码如下:

// +page.svelte
<script lang="ts">
  import type { PageData } from "./$types";
  export let data: PageData;
  const { slug } = data;
</script>

{slug}
Run Code Online (Sandbox Code Playgroud)
// +page.ts
import type { PageLoad } from "./$types";

export const load: PageLoad = async ({ params }) => {
  const slug = params.slug;

  return {
    slug,
  };
};
Run Code Online (Sandbox Code Playgroud)

在我的+layout.svelte文件中,我有一个非常简单的导航:

// +layout.svelte
<a href="/a">A</a> <a href="/b">B</a> <a href="/c">C</a>

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

问题是,当您在三个页面之间单击时,页面的内容不会改变。因此,如果您从主页转到 A,它会显示 A,但如果您随后单击 B 或 C,它仍然会显示 …

sveltekit

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

Svelte:如何将 `on:` 事件传递给子组件

我想创建一个可以处理on:click但不导出handleClick函数的组件;这就是现在的运作方式

button.svelte

<script lang="ts">
  export let handleClick: ((e: MouseEvent) => void ) | undefined = undefined
</script>
<button on:click={handleClick}>
  <slot></slot>
</button>
Run Code Online (Sandbox Code Playgroud)

app.svelte

<script lang="ts">
  import Button from '$lib/button/button.svelte'
</script>
<Button handleClick={() => console.log('click!')}>
  Click me!
</button>
Run Code Online (Sandbox Code Playgroud)

如何更改 Button 元素以on:click直接在应用程序组件中使用?

app.svelte

<Button on:click={handleClick}>
  <slot></slot>
</Button>
Run Code Online (Sandbox Code Playgroud)

javascript svelte sveltekit

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

标签 统计

sveltekit ×10

svelte ×8

javascript ×2

firebase ×1

firebase-hosting ×1

path ×1