我有一条动态路线:
routes/artwork/[slug].svelte.
一切都很好用npm run dev。
但是当我npm run export缺少那些动态 slug 路线时。我没有在__sapper__/export.net 中看到它们,并且当我上传到 Netlify 时,页面也丢失了。
有什么线索可以解决这个问题吗?我错过了一些明显的东西吗?
当我尝试动态更改每个循环变量的数据时,不会刷新 DOM 元素。我如何重绘每个循环值
<script>
// default messages object
let messages =[{
"name":"John",
"message":"Hi",
"checked": false
},
{
"name":"Anthony",
"message":"welcome",
"checked": true
},
{
"name":"David",
"message":"thank you",
"checked": false
}]
//click function to change the values dynamically
function test(){
messages.map(ob=>{
ob.checked = true;
})
console.log(messages)
}
</script>
Run Code Online (Sandbox Code Playgroud)
模板代码
<div>
{#each messages as m}
<div>{m.checked}
<input type="checkbox" bind:checked={m.checked}>
{m.name}
</div>
{/each}
<br>
<button on:click={()=>{test()}}> check all values</button>
</div>
Run Code Online (Sandbox Code Playgroud)
片段链接:https : //svelte.dev/repl/887e7e2de4114ec1bb3625c264b9a62c? version =3.24.1
任何帮助,将不胜感激!谢谢 :)
在 Sapper 中,只有在客户端呈现时(使用onMount),我才尝试导入组件。有没有类似于 ReactSuspense和的 东西React.lazy?还是有另一种方法?
我正在尝试将我的 sapper/svelte 应用程序部署到 heroku,但收到“错误:找不到模块 'polka'”这个错误。有趣的是,它非常好并且工作正常。我的 package.json 是正确的,我也没有将我的模块检查到 git 中。我尝试禁用缓存,但没有好处。谁有想法?
2020-09-16T16:04:44.083385+00:00 app[web.1]: Error: Cannot find module 'polka'
2020-09-16T16:04:44.083386+00:00 app[web.1]: Require stack:
2020-09-16T16:04:44.083386+00:00 app[web.1]: - /app/__sapper__/build/server/server.js
2020-09-16T16:04:44.083386+00:00 app[web.1]: - /app/__sapper__/build/index.js
2020-09-16T16:04:44.083387+00:00 app[web.1]: at Function.Module._resolveFilename (internal/modules/cjs/loader.js:965:15)
2020-09-16T16:04:44.083392+00:00 app[web.1]: at Function.Module._load (internal/modules/cjs/loader.js:841:27)
2020-09-16T16:04:44.083392+00:00 app[web.1]: at Module.require (internal/modules/cjs/loader.js:1025:19)
2020-09-16T16:04:44.083393+00:00 app[web.1]: at require (internal/modules/cjs/helpers.js:72:18)
2020-09-16T16:04:44.083393+00:00 app[web.1]: at Object.<anonymous> (/app/__sapper__/build/server/server.js:4:13)
2020-09-16T16:04:44.083394+00:00 app[web.1]: at Module._compile (internal/modules/cjs/loader.js:1137:30)
2020-09-16T16:04:44.083394+00:00 app[web.1]: at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
2020-09-16T16:04:44.083394+00:00 app[web.1]: at Module.load (internal/modules/cjs/loader.js:985:32)
2020-09-16T16:04:44.083395+00:00 app[web.1]: at Function.Module._load (internal/modules/cjs/loader.js:878:14)
2020-09-16T16:04:44.083395+00:00 app[web.1]: at Module.require (internal/modules/cjs/loader.js:1025:19) {
2020-09-16T16:04:44.083396+00:00 …Run Code Online (Sandbox Code Playgroud) 假设我有一堆数据文档,它们是 S3 中的 JSON 文档,每年一个。我通过 dir 结构在 Sapper 中定义了一条路线:
??? routes
? ??? _error.svelte
? ??? _layout.svelte
? ??? about.svelte
? ??? data
? ? ??? [year].svelte
Run Code Online (Sandbox Code Playgroud)
我的script块中的代码:
let yearData;
onMount(async () => {
const f = await fetch(yearDataUrl(year), {
headers: { 'Access-Control-Allow-Origin': '*' }
});
const jsonResults = await f.json();
yearData = jsonResults;
});
Run Code Online (Sandbox Code Playgroud)
每个数据集在 S3 中作为[s3 url]/[year here].json。导航栏中有一组链接显示每个数据集。我可以onMount很好地加载数据,但随后单击导航栏链接不会加载新数据。所以onMount很可能是错误的选择。
我应该如何构建它?还值得注意的是,我想将这些页面呈现为静态文件(数据很少更改,尤其是前几年)。
我正在尝试在我的 Sapper 应用程序中打开并读取 .md 文件的目录。我尝试导入,但它不允许字符串表达式(`file${index}.md`)。因此,我尝试通过 fs 节点模块打开并读取文件,但我在服务器中收到以下消息:
\n\npreferring built-in module 'fs' over local alternative at 'fs', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning\npreferring built-in module 'fs' over local alternative at 'fs', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning\n'fs' is imported by src/routes/blog/[slug].svelte, but could not be resolved \xe2\x80\x93 treating it as an external dependency\n'default' is imported from external module 'fs' but never used
我有一个<input type="text" />作为搜索栏的<form>.
因为它是一个搜索栏,所以/search?q=thingIWantToSearch当提交表单时,用户应该被重定向到类似于 : 的路由。
目前我正在做,location.href但我认为这不是一个好方法(或者是吗?)
这是我的代码:
<script>
let inputValue = '';
const handleSubmit = () => {
// there should be some parsing before putting it in the url, but it's not the subject
location.href = `/search?q=${inputValue}`;
}
</script>
<form on:submit|preventDefault={handleSubmit}>
<input type="text" bind:value={inputValue} />
<button type="submit">submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)
那么如何在表单提交时正确重定向用户?
我正在SapperJS 中使用kwes.io创建一个联系表单。表格本身有效。
但是一旦我登陆联系页面,我就无法使用 Sapper 链接导航离开它,但正常的 https 链接可以工作。
浏览器中的 URL 更改,但内容未加载。然后要加载内容,我必须重新加载页面。
我联系了 Kwes 的支持团队,但他们说这与 Sapper 处理路由的方式有关,无法提供帮助。
我像这样创建了我的表单
<svelte:head>
<script src="https://kwes.io/js/kwes.js"></script>
</svelte:head>
<div class="kwes-form">
<form method="POST" action="https://kwes.io/api/foreign/forms/YOUR_FORM_KEY">
<label for="name">Your Name</label>
<input type="text" name="name">
<button type="submit">Submit</button>
</form>
</div>
Run Code Online (Sandbox Code Playgroud)
在 Chrome 浏览器控制台上打印
Uncaught (in promise) TypeError: Cannot read property 'removeChild' of null
在 Firefox 控制台上
TypeError: t.parentNode is null
使用 Svelte,我想要完成的是能够html使用我拥有css的post对象的属性来设计我的样式。
我想,没问题,只需在我的svelte:headwith 中添加一个样式标签{post.css}。它会将我的post.css数据直接放入样式标签中,viola',问题解决了。但是,不,问题没有解决。当我在浏览器中查看元素时,我看到
<style>{post.css}</style>
代替
<style>
p{
color: purple;
font-weight: 900;
}
</style>
Run Code Online (Sandbox Code Playgroud)
我创建了一个解决办法,我在那里设置innerText了的<style>后标签onMount,但我不喜欢它,宁愿做它一个更清洁的方式。
我想要的是…
<script>
export let post = {
html: `<p>This is purple</p>`,
css : `
p{
color: purple;
font-weight: 900;
}
`
}
</script>
<svelte:head>
<style>{post.css}</style>
</svelte:head>
{@html post.html}
Run Code Online (Sandbox Code Playgroud)
我必须做些什么才能让它发挥作用……
<script>
import { onMount } from "svelte";
export let post = {
html: `<p>This is purple</p>`,
css : …Run Code Online (Sandbox Code Playgroud) 我想根据我所在的页面/路线更新正文背景颜色。到目前为止我对此:
//index.svelte
:global(body) {
background-color:white;
}
//about.svelte
:global(body) {
background-color:blue;
}
Run Code Online (Sandbox Code Playgroud)
当我从一页转到另一页时,颜色会发生变化,但是当我返回上一页时,颜色不起作用。任何想法 ??
这是我关于使用 Svelte/Sapper 的问题
/src/routes/login.jshttp://<my_domain>/login,它会这样做login.js,我想调用另一个API服务器,假设它是http://another_server/authfetch功能:fetch("http://another_server/auth")、、、this.fetch("http://another_server/auth")Svelte 响应:(this.)fetch is not defined。preload(),所以我将 fetch 包裹在 下export async function preload(){},它不起作用所以我的问题是:除了使用之外axios,我可以继续fetch在服务器端API请求中使用吗?
刚刚在模板[slug].json.js文件中测试,当我添加(this.)fetch函数时,它没有编译,同样的错误:(this.)fetch is not defined
非常感谢。
Svelte 3:道具和子组件数组
我计划根据优秀的redblobgames文章在六角形瓷砖上编写棋盘游戏,并使用 Svelte 3 / Sapper 进行编码。
我的问题是关于子组件与父组件之间通过 props 的通信。我以前使用商店在旧版本的 Svelte 中这样做过,但我想没有它也可以做到这一点。
假设我有一块由 herxagons SVG 瓷砖组成的板。每块的形式为:
<script>
// 3D coordinate system, see: http://redblobgames.org for details
export let hex = { q:0, r:0, s: 0 }
export let center = { x:0, y: 0 }
export let corners = []
export let selected = false
let points = corners.map (c => `${c.x.toFixed(0)},${c.y.toFixed(0)}`).join (' ')
// changed by selection process (colors...)
let inner_class = "inner_tile"
const toggle_select = () …Run Code Online (Sandbox Code Playgroud)