我想问你一个关于将一个简单的例子从版本 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 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 代码:
https://svelte.dev/repl/e3ea17e8e09044999bf7cb4bc882adea?version=3.19.2
我如何调整它以便每个按钮都可以独立切换?正如您所看到的,它当前切换所有按钮:(
这是我创建苗条上下文的方式:
<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) 我正在寻找一种方法来从 JavaScript(而不是从语法)监听另一个组件中的 Svelte 组件分派的事件on:。
这是我试图在 REPL 上实现的代码。
预期的行为是当单击Close 0按钮时控制台中显示0,对于其他按钮依此类推。
我不知道为什么这个不更新。我对 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) 这里是 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) 我只是在研究即将到来的项目的 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)
我认为这可能通过将组件转换为自定义元素(或其他东西)来实现,但我还没有设法完成这项工作(可能是因为我对框架还不够了解)。
有谁知道这是否真的可能?
我正在将 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)
我有更好的方法可以做到这一点吗?我可以仅在满足条件时动态导入和渲染组件吗?
目前正在制作一个 google chrome 扩展来可视化 svelte 组件,这只能用于开发模式。目前,我正在通过const svelteComponets = document.querySelectorAll(`[class^="svelte"]`);在内容脚本上使用来获取所有 svelte 组件,但它正在获取每个 svelte 元素。只获取组件的方法有哪些?
svelte-component ×10
svelte ×9
svelte-3 ×5
javascript ×3
css ×1
dom ×1
element ×1
html ×1
svelte-store ×1