Короткий ответ
Насколько я знаю, вы не можете сделать это таким способом.
Более длинный ответ
В зависимости от некоторых факторов (например, предпочтений, существующих библиотек и т. Д. c ...) могут быть способы обойти это.
Решение 1. Используйте магазины в классе
Первый и самый простой - использовать хранилища в самом классе:
Parser. js
import { writable } from 'svelte/store'
class Parser {
constructor() {
this._history = writable([])
}
parse(string) {
console.log(string)
this._history.update(v => [...v, string])
}
get history() {
return this._history;
}
}
parserStore. js
import { Parser } from './Parser.js'¨
export const parser = new Parser()
Component1.svelte
<script>
import { parser } from './parserStore.js';
let value
let { history } = parser
$: parser.parse(value);
</script>
<input bind:value />
{#each $history as h}<p>{h}</p>{/each}
Обратите внимание, что только часть history
этого класса будет хранилищем.
Решение 2. Перепишите, используя Custom Store
Этот подход, по сути, очень близок к предыдущему, но немного более распространен в сообществе Svelte. Технически он просто обертывает сборку в магазинах, чтобы получить дополнительную функциональность.
parserStore. js
import { writable } from 'svelte/store'
export const parser = (() => {
const P = writable([])
const { set, subscribe, update } = P
function parse(string) {
P.update(arr => [...arr, string])
}
return {
parse,
subscribe
}
})()
Component1.svelte
<script>
import { parser } from './parserStore.js';
let value
$: parser.parse(value)
</script>
<input bind:value />
{#each $parser as h}<p>{h}</p>{/each}
Обратите внимание, что здесь больше нет свойства history
, вы повторяете прямо parser
, если вам все еще нужно свойство истории, вам нужно немного изменить код:
parserStore. js
...
return {
parse,
history: { subscribe }
}
Component1.svelte
<script>
...
const { history } = parser
...
</script>
{#each $history as h}<p>{h}</p>{/each}