Возможно, это то, как работает Svelte. js, но мне любопытно, если я делаю что-то не так, или если есть обходной путь.
Если я устанавливаю опцию компилятора customElement: true
, свойства переданные компонентам недоступны в теге <script>
внутри этого компонента. Я использую веб-пакет с svelte-загрузчиком. Вот простой пример:
// index.html
<my-app foo="testing svelte"></my-app>
<script src="bundle.js"></script>
// script.js (bundled into bundle.js)
import App from './App.svelte';
customElements.define('my-app', App);
// App.svelte
<script>
export let foo;
console.log(foo); // undefined
$: bar = foo.toUpperCase(); // Cannot read property 'toUpperCase' of undefined
$: qux = String(foo).toUpperCase(); // No error, works
</script>
{ foo } // testing svelte - works, as expected
{ qux } // TESTING SVELTE - works, as expected
Кроме того, если customElement: true
не задано, а инфраструктура создается с помощью конструктора const app = new App(...)
, console.log(foo)
будет работать так же, как $: bar = foo.toUpperCase()
.
Может кто-нибудь объяснить, почему Svelte работает таким образом? Спасибо, ура!