【发布时间】:2020-07-09 00:13:02
【问题描述】:
这可能是 Svelte.js 的工作方式,但我很好奇我是否做错了什么,或者是否有解决方法。
如果我设置编译器选项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(...) 构造函数进行实例化,则 @987654326@ 将像 $: bar = foo.toUpperCase() 一样工作。
谁能解释为什么 Svelte 会这样工作?谢谢,干杯!
【问题讨论】:
标签: javascript web-component svelte svelte-3 svelte-component