这可能是 Svelte.js 的工作方式,但我很好奇我是否做错了什么,或者是否有解决方法。
如果我设置 compiler option ,传递给组件的属性在该组件内的标记customElement: true
中不可用。<script>
我使用带有 svelte-loader 的 webpack。这是一个简单的例子:
// 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 会这样工作?谢谢,干杯!