Слот-опора в _layout.svelte не передает опору

Я работаю над проектом Sapper, и я хотел бы загрузить некоторые асинхронные данные в макет перед загрузкой в ​​слоты. Я обнаружил, что в файле _layout.svelte я не могу передавать реквизиты в слот.

//_layout.svelte
<slot foo={"hello"}></slot>

//index.svelte
<script>
  export let foo;
  alert(foo); // returns undefined
</script>

Кто-нибудь сталкивался с этим? Думаю, я мог бы обойти это, просто загрузив все данные, которые мне нужны, в каждый слот / подстраницу. Единственный способ установить реквизит слота - получить к нему доступ вручную.

$$props.$$scope.ctx.level1.props.foo = "hello"

person csliva    schedule 05.01.2020    source источник


Ответы (1)


Передача таких данных, похоже, не работает. Однако вы можете использовать контекст:

// in _layout.svelte
import {setContext} from 'svelte';
setContext('foo', foo);
// in index.svelte
import {getContext} from 'svelte';
const foo = getContext('foo');
person bummzack    schedule 06.01.2020
comment
Принято, спасибо! Это меньше шаблонов, чем использование магазина, и, похоже, работает аналогично хранилищу пропеллеров. - person csliva; 06.01.2020