创建组件永久链接
tsconstcomponent = newComponent (options );
客户端组件 — 即使用 generate: 'dom'(或未指定 generate 选项)编译的组件是 JavaScript 类。
tsimportApp from './App.svelte';constapp = newApp ({target :document .body ,props : {// assuming App.svelte contains something like// `export let answer`:answer : 42}});
可以提供以下初始化选项
| 选项 | 默认值 | 说明 |
|---|---|---|
target |
无 | 要渲染到的 HTMLElement 或 ShadowRoot。此选项是必需的 |
anchor |
null |
target 的子项,组件将立即在该子项之前渲染 |
props |
{} |
要提供给组件的属性对象 |
上下文 |
new Map() |
向组件提供根级上下文键值对的 Map |
hydrate |
false |
见下文 |
intro |
false |
如果为 true,将在初始渲染时播放转换,而不是等待后续状态更改 |
target 的现有子元素保留在原位。
hydrate 选项指示 Svelte 升级现有的 DOM(通常来自服务器端渲染),而不是创建新元素。只有在使用 hydratable: true 选项编译组件时,此选项才有效。<head> 元素的水化仅在服务器端渲染代码也使用 hydratable: true 编译时才正常工作,后者会在 <head> 中的每个元素添加一个标记,以便组件知道在水化期间负责删除哪些元素。
虽然 target 的子元素通常保持不变,但 hydrate: true 会导致删除所有子元素。因此,anchor 选项不能与 hydrate: true 一起使用。
现有的 DOM 不需要与组件匹配 — Svelte 会在进行时“修复”DOM。
index.js
tsimportApp from './App.svelte';constapp = newApp ({target :document .querySelector ('#server-rendered-html'),hydrate : true});
$set永久链接
tscomponent .$set (props );
以编程方式设置实例上的属性。component.$set({ x: 1 }) 等效于组件的 <script> 块内的 x = 1。
调用此方法会为下一个微任务安排更新 — DOM 不会 同步更新。
tscomponent .$set ({answer : 42 });
$on永久链接
tscomponent .$on (ev ,callback );
导致在组件分派 event 时调用 callback 函数。
返回一个在调用时将移除事件侦听器的函数。
index.js
tsconstoff =component .$on ('selected', (event ) => {console .log (event .detail .selection );});off ();
$destroy永久链接
tscomponent .$destroy ();
从 DOM 中移除组件并触发任何 onDestroy 处理程序。
组件属性永久链接
tscomponent .prop ;
tscomponent .prop =value ;
如果使用 accessors: true 编译组件,则每个实例都将具有与组件的每个属性相对应的 getter 和 setter。设置值将导致同步更新,而不是由 component.$set(...) 导致的默认异步更新。
默认情况下,accessors 为 false,除非你正在作为自定义元素进行编译。
index.js
tsconsole .log (component .count );component .count += 1;
index.ts
tsconsole .log (component .count );component .count += 1;